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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:03:21