You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:36:23