如何用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函数核心逻辑:- 动态分配大小为10的数组
digitCounts,用new int[10]()的写法能自动将所有元素初始化为0,刚好对应数字0到9的初始计数。 - 遍历输入字符串的每个字符,通过ASCII码范围判断是否为数字字符。
- 把数字字符转换为数组索引(比如
'5' - '0'得到整数5),然后对对应索引的计数加1。 - 最后返回统计好的数组指针。
- 动态分配大小为10的数组
main函数的修正:
- 把循环次数从11改成10,因为我们只统计0-9这10个数字。
- 把输出里的"Letter"改成"Digit",表述更准确。
- 新增
delete[] counts;,因为用new分配的内存必须手动释放,避免内存泄漏。
为什么原来的count函数不行?
你原来的count函数在循环里直接return s[i],既没有做任何数字统计,也没有返回符合要求的数组指针,完全不符合函数的预期功能,所以必然编译报错。
内容的提问来源于stack exchange,提问作者swagalistic
相关产品推荐
相关产品推荐

