gpt4 book ai didi

c++ - strcmp(x, str) 错了吗?

转载 作者:行者123 更新时间:2023-11-28 07:59:43 24 4
gpt4 key购买 nike

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

在网上找了半天也没找到结果。我该如何解决这个问题?

最佳答案

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

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

只有当 x 和 y 都是 C 风格的字符串时,你才应该执行 strcmp(x, y) == 0

关于c++ - strcmp(x, str) 错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com