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

C语言数字频率统计代码运行输出全0,求助排查逻辑错误

代码错误点及修正方案

存在的逻辑错误

  • 核心需求适配错误:你需要统计字母数字混合字符串中的数字频率,但使用atoi(s)将字符串转整数的操作完全不符合需求,atoi遇到第一个非数字字符就会终止转换,若字符串开头为字母会直接返回0,不仅会丢失所有字母后的数字内容,也完全无法提取字母穿插场景下的数字,这是你输出全为0的最主要原因。
  • 长度计算逻辑错误:你通过整数反复除以10的方式计算长度,若atoi返回0(比如输入开头是字母),len会被计算为0,后续两层循环都不会执行,count自然没有累加。
  • 统计方式存在天然缺陷:就算输入全是数字,用整数取余统计的方式也会丢失前导0的计数,若输入数字长度超过int类型存储上限还会出现溢出问题。

正确实现方案

不需要转整数,直接遍历原始输入字符串的每个字符判断计数即可:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char *s;
    s = malloc(1024 * sizeof(char));
    scanf("%[^\n]", s);
    s = realloc(s, strlen(s) + 1);
    int count[10] = {0};
    // 遍历字符串所有字符
    for(int i = 0; s[i] != '\0'; i++){
        // 判断是否为数字字符
        if(s[i] >= '0' && s[i] <= '9'){
            count[s[i] - '0']++;
        }
    }
    // 输出0-9的出现频率
    for(int j = 0; j < 10; j++){
        printf("%d ", count[j]);
    }
    free(s);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:12:03