c语言 随机输入一个字符串,统计该串中每个数字字符(0,1,2,3,4,5,6,7, 8,9)出现的次数。

考虑:
(1)用num[0]来统计字符0的个数,用num[1]来统计字符1的个数......用num[9]来统计字符9的个数。
(2)如何实现一个字符串的输入。

思路:统计字符串中每个数字字符出现的个数可以先定义一个整数数组a大小是10,依次保存0-9字符出现个数,遍历字符串,判断该字符是否是数字字符,如果是对应的数组元素自加1。

参考代码:

#include<stdio.h>
#include<string.h>
int main()

char a[100];
int i,n,num[10];
gets(a);
n=strlen(a);
for(i=0;i<10;i++){
num[i]=0;
}
for(i=0;i<n;i++)
if(a[i]>='0'&&a[i]<='9')
num[a[i]-'0']++;
for(i=0;i<10;i++)
printf("%d ",num[i]);
    return 0;
}
/*
输出:
ads51df0a3df9d87f89ads4fd0f3adsf21sdf47d89f9adsf65as1d2f3asd
2 3 2 3 2 2 1 2 3 4
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-03
#include<stdio.h>
int main(){
int i,num[10]={0};
char c,s[100];
gets(s);
for(i=0; s[i]; i++){
c=s[i];
if(c>='0' && c<='9')
num[c-48]++;
}
for(i=0; i<10; i++)
printf("%d:\t%d\n",i,num[i]);
}追问

num[c-48]++;
printf("%d:\t%d\n",i,num[i]);
这两个看不懂

追答

'0'的ASCII码为48,'1'为49,……,因此,'0'-48=0, '1'-48=1, ...,'9'-48=9。
c是char型,存放的是字符'0'~'9'的ASCII码,所以num[c-48]++;,当c='0'时,相当于num[0]++;,当c='1'时,相当于num[1]++;,……。
,

本回答被提问者采纳
第2个回答  2011-12-03
gets(ch)
for(i=0;ch(i)!='\n';i++)
if (ch[i]='0')
num[0]++;
if (ch[I]='1')
num[1]++;
就像这样输下去 最后printf num[0-9]
第3个回答  2011-12-03
#include<stdio.h>

int main(){

char ch;
int num[10]={0},i=0;

do{
ch = getchar();
switch(ch){
case '0':num[0]++;break;
case '1':num[1]++;break;
case '2':num[2]++;break;
case '3':num[3]++;break;
case '4':num[4]++;break;
case '5':num[5]++;break;
case '6':num[6]++;break;
case '7':num[7]++;break;
case '8':num[8]++;break;
case '9':num[9]++;break;
}
} while( ch != '\n' ) ;
while(i<10)
printf( "\nnum[%d]==>%d\n",i++, num[i] );

return 0;
}

字符串输入
char c[100];
scanf("%s",c);
第4个回答  2011-12-03
#include <stdio.h>
int main()
{
char a[100];
int num[10]={0};
int i=0;
scanf("%s",a);
while(a[i]!='\0')
{
if(a[i]>'0' && a[i]<'9')
num[a[i]-'0']++;
i++;
}
for(i=0;i<10;i++)
printf("%d的个数为%d\n",i,a[i]);
}
相似回答