如何用C语言结合指针实现数字字符串中最频繁数字的计算?
用指针实现统计字符串中最频繁数字的完善方案
我来帮你搞定这个用指针实现的数字统计问题,你的代码已经有了雏形,只需要补上核心的统计逻辑和结果计算部分就行,咱们一步步来:
先梳理现有代码的问题
你的代码目前只做了字符串长度计数,没实际统计每个数字的出现次数;而且malloc出来的计数器数组没有初始化,会导致统计结果乱掉;最后也没有返回最终计算出的结果。
完善后的完整代码
#include <stdio.h> #include <stdlib.h> #include <ctype.h> // 用于判断字符是否为数字 int most(char* string){ // 为0-9共10个数字分配计数器数组内存 int* counter_array = (int*)malloc(sizeof(int)*10); if (counter_array == NULL) { // 检查内存分配是否成功 return -1; // 分配失败返回错误标识 } // 用指针初始化计数器数组所有元素为0 int* arr_ptr = counter_array; for (int i = 0; i < 10; i++) { *arr_ptr++ = 0; } // 用指针遍历字符串每个字符 char* str_ptr = string; while (*str_ptr != '\0') { // 先判断当前字符是否是数字字符 if (isdigit(*str_ptr)) { // 将字符转为对应的数字索引,比如'3'转成3 int num_index = *str_ptr - '0'; // 通过指针定位到对应计数器位置并累加次数 *(counter_array + num_index) += 1; } str_ptr++; // 指针移动到下一个字符 } // 找出出现次数最多的数字 int max_count = 0; int most_freq_num = 0; arr_ptr = counter_array; // 重置数组指针到起始位置 for (int i = 0; i < 10; i++) { if (*arr_ptr > max_count) { max_count = *arr_ptr; most_freq_num = i; } arr_ptr++; // 移动数组指针遍历下一个元素 } free(counter_array); // 释放动态分配的内存,避免内存泄漏 return most_freq_num; } // 测试示例 int main() { char nums[] = "132433423"; printf("%d \n", most(nums)); // 输出3,符合预期 return 0; }
关键部分解释
- 计数器数组初始化:用指针
arr_ptr遍历数组,把每个元素设为0,避免未初始化的垃圾值干扰统计结果。 - 字符串遍历逻辑:用
str_ptr指针逐个访问字符串字符,判断是数字后,通过*str_ptr - '0'得到数字对应的数组索引,再用指针counter_array + num_index定位到对应计数器位置累加次数。 - 查找最频繁数字:再次用指针遍历计数器数组,记录最大计数对应的数字索引(也就是数字本身)。
- 内存管理:别忘了用
free释放malloc分配的内存,养成良好的内存使用习惯。
测试验证
当调用most("132433423")时,数字3出现了4次,是所有数字中出现次数最多的,所以返回3,完全符合你的预期。
内容的提问来源于stack exchange,提问作者30278560387
相关产品推荐
相关产品推荐

