C语言统计重复数字次数

img

img


1.为什么后面的都是0
2.如何修改使其满足统计重复的数字的次数

数字后面全是0,因为b[a[i]]++这句代码的原因,a[i]里的数据都是字符,所以b[a[i]]++数组越界(比如数字字符'1'的ASCII码是49, 那b[a[i]]++就会执行b[49]++),不是在数组b前面10个数组位置计数,所以导致结果错误;

b[a[i]]++; 改为 b[a[i]-'0']++;即可,因为数组b是int数组,把字符数字改为数字,用字符数字-'0'就可以了;

然后i<=strlen(a)改为i<strlen(a),因为使用scanf()函数获取一个字符串到数组a后,数组a最后一个元素下标是strlen(a)-1(除去末尾的空字符'\0').

修改如下:

参考链接:
ASCII码对照表-完整ASCII码表-我就查查询

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

int main(void){
    int i;
    char a[100];
    int b[10]={0};
    scanf("%s",a);
    
    for(i=0;i<strlen(a);i++){
        b[a[i]-'0']++;
    }
    
    printf("  0  1  2  3  4  5  6  7  8  9\n");
    for(i=0;i<10;i++){
        printf("  %d",b[i]);
    }
    
    return 0;
}
 

img