Онлайн компилятор C

#include <stdio.h> void print_digit(char s[]){ int a[11]={0}; int i=0; while((s[i]-'0')>=0&&(s[i]-'0')<=9){ for(int m=0;m<10;m++){ if(m==(s[i]-'0')){ a[m]++; } }i++; } for(int i=0;i<10;i++){ if(a[i]!=0){ printf("%d %d\n",i,a[i]);} } } int main() { char t[100]; scanf("%s",t); print_digit(t); return 0; }
这段代码的功能是统计输入字符串中连续数字字符的出现次数,并输出每个数字及其出现次数。但代码有一个关键问题:它只处理字符串开头的连续数字,遇到第一个非数字字符就会停止。

- 你的while循环条件 `(s[i]-'0')>=0 && (s[i]-'0')<=9` 会在遇到第一个非数字字符时立即退出,导致字符串中后面的数字被忽略。例如输入 "a123b456",只会统计 "123" 而忽略 "456"。
- 考虑如何遍历整个字符串直到结尾,而不是遇到非数字就停止。你可以用 `s[i] != '\0'` 作为循环条件,然后在循环内部判断当前字符是否为数字。