以下是问题说明:
给出一个由字母和数字组成的字符串,找出给定字符串中每个数字的频率。
输入格式:
第一行包含一个字符串num,它是给定的数字。 num的所有元素均由英文字母和数字组成。
输出格式:
在一行中打印十个以空格分隔的整数,表示每个数字从到的频率。
我已经使用switch尝试了这段代码,但是我不知道为什么它没有给出正确的答案
对于此输入(a11472o5t6),我希望此输出(0 2 1 0 1 1 1 1 0 0) 但是我得到了以下输出:(1 2 3 0 1 2 1 1 1 0)
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
char string[1000];
int count[10] = {0};
scanf("%s", string);
for(int i = 0; i < 1000; ++i){
switch(string[i]){
case '0':
count[0]++;
break;
case '1':
count[1]++;
break;
case '2':
count[2]++;
break;
case '3':
count[3]++;
break;
case '4':
count[4]++;
break;
case '5':
count[5]++;
break;
case '6':
count[6]++;
break;
case '7':
count[7]++;
break;
case '8':
count[8]++;
break;
case '9':
count[9]++;
break;
default:
break;
}
}
for(int i = 0; i < 10; ++i){
printf("%d ", count[i]);
}
return 0;
}
答案 0 :(得分:0)
您要遍历1000个字符,但是scanf
不会用零或类似的数字填充string
的其余部分。它会添加一个终止符'\0'
,此后会出现垃圾,其中可能包括您要计数的字符。
因此,而不是从0循环到999:
for(int i = 0; i < 1000; ++i){
循环播放直到结束:
for (int i = 0; string[i] != '\0'; i++) {