0

作为一个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

经过长时间的搜索,我在互联网上没有找到任何结果。我怎样才能解决这个问题?

4

5 回答 5

1

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

如果 y 是 C 风格的字符串,那么相同的代码x == y也可以工作,因为 C 风格的字符串会自动转换为 C++ 风格的字符串,但是在这种情况下,这样做可能会更好,strcmp(x.c_str(), y) == 0因为这样可以避免自动转换。

只有当 x 和 y 都是 C 风格的字符串时,您才应该这样做strcmp(x, y) == 0

于 2012-08-05T09:45:56.023 回答
1

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

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

除此之外,似乎在您的代码中没有声明“y”参数。

于 2012-08-05T09:48:17.070 回答
0

编译器期望 aconst char*或可转换为const char*. 但std::string不能隐式转换为const char*.

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

于 2012-08-05T09:50:34.740 回答
0

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

x.c_str ()
于 2012-08-05T09:47:46.523 回答
-1

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

于 2012-08-05T09:48:29.743 回答