C++中统计字符串指定字符出现次数结果始终为0的问题
问题分析与解决
核心错误原因
你代码里的关键问题是获取字符串长度的时机错了:
length = str.length(); // 此时str是空字符串,length被赋值为0 cin >> search; cin >> str;
执行length = str.length();时,str还没被输入赋值,是空字符串,所以length的值是0。后续的for循环条件i < length永远不满足,循环一次都不会执行,计数自然始终为0。
另外,char类型没有compare方法,之前尝试的ch.compare(search)是错误用法,字符之间直接用==比较就可以。
修正后的代码
把获取长度的代码移到输入字符串之后即可:
#include <iostream> #include <string> using namespace std; int main() { string str; char search; int count = 0; // 先读取输入内容 cin >> search; cin >> str; // 读取完字符串后再获取长度 int length = str.length(); for (int i = 0; i < length; i++) { char ch = str[i]; if (ch == search) { count += 1; } } cout << count << " " << search << "'s" << endl; return 0; }
更简洁的写法
可以用C++的范围for循环简化遍历逻辑:
// 替换原来的for循环部分 for (char ch : str) { if (ch == search) { count++; } }
或者直接使用标准库的count函数(需要包含<algorithm>头文件):
#include <iostream> #include <string> #include <algorithm> // 新增头文件 using namespace std; int main() { string str; char search; cin >> search; cin >> str; int count = count(str.begin(), str.end(), search); cout << count << " " << search << "'s" << endl; return 0; }
内容的提问来源于stack exchange,提问作者MoonProgrammer
相关产品推荐
相关产品推荐

