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

#include <stdio.h> void print_digit_count(char number[]){ int count[10]={0}; int l=0; while(number[l]!='\0'){ l++; } for(int i=0;i<l-1;i++){ char c=number[i]; if(c>='0'&&c<='9'){ count[c-'0']++; } } for(int i=0;i<10;i++){ if(count[i]!=0){ printf("%d %d\n",i,count[i]); } } } int main() { //int a[5] = {1, 23, 5, 8, 6}; // 1 5 8 6 23// print_digit_count("1234"); return 0; }
这段代码定义了一个函数 `print_digit_count`,它接收一个字符串,统计其中每个数字字符('0'到'9')出现的次数,然后打印出出现次数不为零的数字及其次数。主函数中调用它测试了字符串 "1234"。

- 在计算字符串长度时,循环结束后 `l` 的值是字符串的长度(包括结尾的 '\0'),但后续的 `for` 循环条件写成了 `i < l-1`,这会导致少处理最后一个字符。对于 "1234" 来说,长度是4,循环只处理前3个字符,所以数字 '4' 不会被统计。
- 检查循环条件 `i < l-1` 这一行,思考一下字符串长度和需要遍历的字符范围之间的关系。