strcmp(x,str)错了?

时间:2012-08-05 09:43:36

标签: c++

作为C ++的初学者,我在很长一段时间内对这一点感到困惑,程序是告诉每个单词出现在字符串中的时间。

#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;
}

这是错误:

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

经过长时间的搜索后,我在互联网上找不到任何结果。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

如果x和y是C ++字符串,那么你只需说x == y。您正在尝试在C ++对象上使用C函数strcmp

如果y是C样式字符串,那么相同的代码x == y也将起作用,因为C样式字符串将自动转换为C ++样式字符串,但在这种情况下,最好做{{1因为这可以避免自动转换。

只有当x和y都是C样式字符串时,才应执行strcmp(x.c_str(), y) == 0

答案 1 :(得分:1)

错误是因为strcmp期望const char*std::string不同。您可以在该字符串上检索const char *调用方法c_str()

if (strcmp(x.c_str(),y) == 0)

除此之外,似乎'y'参数在代码中无处声明。

答案 2 :(得分:0)

X是一个字符串,strcmp比较const char * 要将字符串转换为const char *,请使用

x.c_str ()

答案 3 :(得分:0)

编译器期望const char*或可转换为const char*的内容。但std::string无法隐式转换为const char*

如果您想使用strcmp,则必须使用c_str方法获取const char*。但在你的情况下,最好使用重载的==来使用std :: string。

答案 4 :(得分:-1)

jahhaj是对的,但是如果你想在字符串上调用C函数,可以使用string_instance.c_str()将字符串作为const char *