作为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
经过长时间的搜索后,我在互联网上找不到任何结果。我该如何解决这个问题?
答案 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 *