我正在尝试比较两个字符(我的搜索字符和输入字符串中的字符)以查看给定字符串中存在多少我的搜索字符。但是,无论我输入什么,我得到的计数都是 0。
以下是我的参考代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
int length = 0;
char ch;
char search;
int count = 0;
length = str.length();
cin >> search;
cin >> str;
for (int i = 0; i < length; i++) {
//current character
ch = str[i];
//cout << ch << " ";
if (ch == search) {
count += 1;
}
}
cout << count << " " << search << "'s" << endl;
return 0;
}
我已经尝试过
ch.compare(search)
和 (ch == search)
,如我的代码所示。两者都只会导致我的 count
得 0。我还翻转了ch
和search
,并尝试将search
和ch
都设置为' '
,但同样没有任何作用。下面是我尝试过的其中一项测试的示例。
字符串中有多少个
e
."Geek"
我不知道我做错了什么,因为
count
的输出为 0。
例如:
输入:
"Geek"
2 e's
0 e's
我在我的 IDE 中使用 CLion,我的语言标准设置为 C++23。
你看,你的代码首先可以简化。您使用大量不必要的内存来尝试比较事物。我添加了评论让你知道你可以缩短什么。
其次,这是你的问题。在输入之前设置字符串的长度。这意味着你在你的
cin
之前得到一个空字符串的长度,这意味着length
是0而不是输入的长度。这意味着您的循环在 0 处结束并且不会运行。把你的cin
行放在那之前,你的问题就会解决。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = ""; //no need for extra int for length
char search = '\0';
int searchCnt = 0;
cin >> search >> str; //you can cin at the same time
for (int i = 0; i < str.length(); i++) { //str.length() wont be 0
if (search == str[i]) { // no need for new char ch
searchCnt++; //same as searchCnt += 1
}
}
cout << searchCnt << " " << search << "'s" << '\n';
return 0;
}
你正在检索
str.length()
before 你用 cin >> str
读取用户的输入,当 str
仍然是空的,因此你的 length
变量总是 0 并且你的循环永远不会运行。
读取输入后需要读取长度:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
int length = 0;
char ch;
char search;
int count = 0;
cin >> search;
cin >> str;
length = str.length(); // <-- move down here!
for (int i = 0; i < length; i++) {
//current character
ch = str[i];
//cout << ch << " ";
if (ch == search) {
count += 1;
}
}
cout << count << " " << search << "'s" << endl;
return 0;
}
std::count()
算法而不是手动循环:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string str;
char search;
int found;
cin >> search;
cin >> str;
found = count(str.begin(), str.end(), search);
cout << found << " " << search << "'s" << endl;
return 0;
}