C++如何在字符串数组中查找指定字符并统计出现次数
程序需求
- 第一步接收用户输入的3个字符串,存入
string类型数组 - 第二步接收用户指定的待查找
char类型字符 - 遍历所有字符串,统计该字符的总出现次数
运行示例:用户输入字符串为
Cat Car Watch,待查找字符输入为a,预期输出为Letter a appears 3 times!
现有代码问题
当前已写的代码存在核心逻辑错误:计数环节仅遍历数组层面的string元素,直接将整个string对象与char类型的目标字符做相等比较,没有深入遍历每个字符串内部的单个字符,完全无法实现正确计数。
原有错误代码如下:
string userString[3]; for (int i = 0; i < 3; i++) { cout << "Input string: "; getline(cin, userString[i]); } char userChar; cout << "Input char you want to find in strings: "; cin >> userChar; int counter = 0; for (int i = 0; i < 3; i++) { if (userString[i] == userChar) { counter++; } } cout << "The char you have entered has appeared " << counter << " times in string array!";
修正方案
核心修改点:在遍历数组拿到每一个字符串后,新增一层内层循环,遍历当前字符串的每一个字符,逐一和目标字符比对,匹配成功则计数器累加,同时调整输出格式匹配示例要求。
修正后可正常运行的完整代码如下:
#include <iostream> #include <string> using namespace std; int main() { string userString[3]; for (int i = 0; i < 3; i++) { cout << "Input string: "; getline(cin, userString[i]); } char userChar; cout << "Input char you want to find in strings: "; cin >> userChar; int counter = 0; for (int i = 0; i < 3; i++) { // 内层遍历当前字符串的每一个字符 for (char c : userString[i]) { if (c == userChar) { counter++; } } } cout << "Letter " << userChar << " appears " << counter << " times!" << endl; return 0; }
*如果使用不支持C++11的老旧编译环境,可以把内层范围for替换成传统下标遍历写法:
for (int j = 0; j < userString[i].size(); j++) { if (userString[i][j] == userChar) { counter++; } }
内容的提问来源于stack exchange,提问作者matg
相关产品推荐
相关产品推荐

