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;
}