2014-09-10 5 views
-1

strcmp를 사용하는 방법을 이해하는 데 어려움을 겪고 있습니다. equals() 함수에 전송되는 문자열에 대한 변경 사항이 테스트 1a - 1d의 결과에 영향을 미치지 않는 것처럼 보입니다. 함수 호출 앞에 감탄 부호의 목적은 무엇입니까? 이 프로그램의 목적은 문자열이 동일한 길이와 같은 경우 "올바른"문자열을 비교하는 것입니다. 다음 코드는 내 교수가 제공했습니다. 나는 equal() 함수와 함수 프로토 타입 안에있는 것만 바꿀 수있다. 접두사 단항 연산자로서 사용될 때함수에서 strcmp를 올바르게 사용하는 방법

#include <iostream> 
    #include <cstring> 
    #include <cctype> 

    using std::cin; 
    using std::cout; 
    using std::endl; 

bool equals(const char*, const char*); 

int main() 
    { 

    // Tests 1a - 1d: Test the equals() function 
    cout << "Test 1a: "; 
    if (equals("catapult", "catapult")) 
     cout << "correct\n"; 
    else 
     cout << "incorrect\n"; 

    cout << "Test 1b: "; 
    if (!equals("catapult", "catamaran")) 
     cout << "correct\n"; 
    else 
     cout << "incorrect\n"; 

    cout << "Test 1c: "; 
    if (!equals("cat", "catamaran")) 
     cout << "correct\n"; 
    else 
     cout << "incorrect\n"; 

    cout << "Test 1d: "; 
    if (!equals("catapult", "cat")) 
     cout << "correct\n"; 
    else 
     cout << "incorrect\n"; 

    cout << endl; 
return 0; 
} 

bool equals (const char* str1, const char* str2) 
{ 
    if (strcmp(str1, str2) == 0) 
     return true; 

    return false; 

} 
+5

이것은 C++에서'strcmp'를 올바르게 사용하는 방법입니다. 1 단계 :'char const * '의 모든 항목을'std :: string'으로 바꾸십시오, 2 단계 :'strcmp'의 모든 항목을'==' . – user657267

+0

'!'는 논리적 연산자가 아니며'false' 다음을'true'로,'true'를'false'로 변경합니다. 그래서'! true''==''false','! false'' ==''true''입니다. '! equals (x, y)'는 "not (equals (x, y))"또는 - 영어로 의역 어구 - "x는 y와 같지 않음"을 의미합니다. –

+1

"문자열이 같은 길이와 같은 경우"- 이것은'strcmp'가 ... 같은 것을 비교하기 위해 테스트하는 것과 같지 않습니다. 길이가 같아야하고 모든 문자가 정확히 일치해야합니다 ... 같은 위 또는 소문자만으로는 충분하지 않습니다. –

답변

0

느낌표, 상기 논리 NOT (또는 부정) 연산자이다. equals("catapult","catamaran")이 false 인 경우 equals("catapult","catamaran")의 부정은 즉 사실 인 것처럼

그래서

if (!equals("catapult", "catamaran")) 

을 읽을 수 있어야합니다.

부정 계산 연산자 !보다 낮은 우선 순위이 함수 호출보다 많습니다. 그래서 !equals("catapult","catamaran")은 BTW !(equals("catapult","catamaran"))

와 같은 의미를 정품 C 코드하려는 경우, 당신은 ++에 대한 std::string을 배워야한다 있습니다. 그리고 당신은 strcmp의 문서를 읽어도 strcasecmp

마지막에서, 모든 경고와 (예를 들어, g++ -Wall -g) 디버그 정보와 함께 컴파일해야 볼 단계별로 프로그램 단계를 실행하는 디버거 (gdb)를 사용합니다.

+0

나는 이것을 조금 더 잘 말해야했다. 나는 그것을 안다! 부정입니다. 나는이 특정한 경우에 그것이 왜 있는지 이해하지 못한다. 그 시험은 내 교수가했다. 과거의 기능뿐만 아니라 기능도 이미 제공되었습니다. 함수 내에서만 코드를 제공합니다. 도와 주셔서 감사합니다! – Kaynum

+0

교수님은''cat "이''catamaran ''과 같은"것으로 "기대하지 않으시 며, 그는 맞습니다. –

+0

그 외침은 의사 코드라고 말하는거야?반환 값이 부정에서 반전 될 때 문자열을 비교하는 함수를 만드는 것은 의미가 없습니다. – Kaynum

관련 문제