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

如何用C++的int* count(const string& s)统计字符串中各数字出现次数?

解决C++数字统计函数的实现问题

我来帮你搞定这个数字统计函数的实现!你原来的count函数逻辑完全跑偏了,咱们一步步修正过来,满足你的需求:不能用map和<algorithm>库,正确统计字符串中每个数字的出现次数。

首先,先看修正后的完整可运行代码:

#include <string>
#include <iostream>
using namespace std;

int* count(const string& s);

int main() {
    string userinput = "random word 123 456 111 000"; // 换个带数字的测试输入更直观
    int *counts = count(userinput);
    
    // 数字是0-9,所以循环10次就够了,原来的11是多余的
    for (int i = 0; i < 10; i++) {
        cout << "Digit " << i << " occurred " << counts[i] << " times.\n";
    }
    
    // 记得释放动态分配的内存,避免内存泄漏
    delete[] counts;
    system("pause");
    return 0;
}

int* count(const string& s) {
    // 动态分配一个大小为10的int数组,对应数字0-9的计数,初始化为0
    int* digitCounts = new int[10]();
    
    // 遍历字符串中的每个字符
    for (char c : s) {
        // 判断当前字符是否是数字字符(利用ASCII码连续性)
        if (c >= '0' && c <= '9') {
            // 把字符转换成对应的数组索引:比如'0'对应0,'1'对应1,以此类推
            int index = c - '0';
            digitCounts[index]++;
        }
    }
    
    // 返回统计结果的数组指针
    return digitCounts;
}

关键部分解释:

  • count函数核心逻辑:

    1. 动态分配大小为10的数组digitCounts,用new int[10]()的写法能自动将所有元素初始化为0,刚好对应数字0到9的初始计数。
    2. 遍历输入字符串的每个字符,通过ASCII码范围判断是否为数字字符。
    3. 把数字字符转换为数组索引(比如'5' - '0'得到整数5),然后对对应索引的计数加1。
    4. 最后返回统计好的数组指针。
  • main函数的修正:

    • 把循环次数从11改成10,因为我们只统计0-9这10个数字。
    • 把输出里的"Letter"改成"Digit",表述更准确。
    • 新增delete[] counts;,因为用new分配的内存必须手动释放,避免内存泄漏。

为什么原来的count函数不行?

你原来的count函数在循环里直接return s[i],既没有做任何数字统计,也没有返回符合要求的数组指针,完全不符合函数的预期功能,所以必然编译报错。

内容的提问来源于stack exchange,提问作者swagalistic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:44