2012-08-05 2 views
0

C++의 초보자로서, 나는 오랜 시간이 시점에서 당황 스럽다. 프로그램은 각 단어가 나타나는 시간을 문자열로 알려주는 것이다. 나는 오랜 검색 후 인터넷에서 어떤 결과를 찾을strcmp (x, str)가 잘못 되었나요?

C++\code\3.3.cpp(17) : error C2664: 'strcmp' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *' 
     No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

: 여기

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

int main() 
{ 
    string x; 
    vector<string> str; 
vector<int> t; 
while (cin >> x) 
{ 
    int k = 0; 
    for (int j = 0; j != str.size(); j++) 
    { 
     if (strcmp(x,str[j]) == 0) 
      t[j]++; 
     k = 1; 
    } 
    if (k == 0) 
    { 
     str.push_back(x); 
     t.push_back(1);  
    } 

} 

for (int i = 0; i != str.size(); i++) 
{ 
    cout << str[i] << " " << t[i] << endl; 
} 

return 0; 
} 

는 오류입니다. 이 문제를 어떻게 해결할 수 있습니까?

+1

'y'는 무엇입니까? ..... 또한 std :: string은'std :: strcmp'와 함께 사용할 수 없습니다. – Nawaz

+1

한 단어 : * documentation * ... –

+0

strcmp의 동작이 필요한 경우 문자열 :: compare를 사용하여 문자열을 비교할 수 있습니다. – Cubic

답변

1

x와 y가 C++ 문자열 인 경우 x == y이라고 말하면됩니다. C++ 객체에서 C 함수 strcmp을 사용하려고합니다.

y가 C 스타일 문자열 인 경우 C 스타일 문자열이 자동으로 C++ 스타일 문자열로 변환되기 때문에 동일한 코드 x == y이 작동하지만이 경우 자동으로 수행하지 않으므로 strcmp(x.c_str(), y) == 0을 수행하는 것이 더 나을 수 있습니다. 변환.

x와 y가 모두 C 스타일 문자열 인 경우에만 strcmp(x, y) == 0을 수행해야합니다.

+0

두려워 할 자동 변환이 없습니다 (함수의 효과에 대한 설명을 제외하면'x == string (y)'를 사용하여 * as-if *로 작동합니다). 모든 것을 처리 할'string :: compare (const char *)'오버로드가있다. –

+0

어쩌면 내가 C 프로그래밍의 스타일을 빠져 나가지 못했을 것이다. 너무 감사드립니다! :) – Flaurel

0

X는 문자열이며, strcmp와는 const를 숯불 * 사용

x.c_str() 
+0

thx! 이제 알겠습니다! – Flaurel

1

문자열을 변환하려면 const를 문자 * 을 비교 오류 STRCMP는 std::string는 다른 const char*을 기대하기 때문이다. 당신은 그 문자열에 CONST의 char *의 호출 방법 c_str()를 검색 할 수 있습니다

그 외에도
if (strcmp(x.c_str(),y) == 0) 

, 'Y'매개 변수가 코드 안에 아무데도 선언되지 않은 것으로 보인다.

+0

thx! 미안하지만 "str [j]"가 아니라 "y" – Flaurel

-1

jahhaj 바로,하지만 당신은 문자열에 C 함수를 호출 할 경우, 당신은 const char*const char* 또는 뭔가 convertable을 기대 const char *

+0

thx !! 나는 그것을 지금 시험해보고 미안하다 "str [j]" "y"가 아니다 – Flaurel

0

컴파일러와 같은 문자열을 얻을 수 string_instance.c_str()를 사용할 수 있습니다. 그러나 std::string은 암시 적으로 const char*으로 변환 할 수 없습니다.

strcmp을 사용하려는 경우 c_str 메서드를 사용하여 const char*을 얻어야합니다. 하지만 귀하의 경우 std :: string과 함께 작동하도록 오버로드 된 ==을 사용하는 것이 좋습니다.

+0

thx !! 유감스럽게도 "y"가 아닌 "str [j]"입니다. – Flaurel