L1-003 个位数统计

这个题的感觉很不好处理,想了很长时间也没有做出来,看了一下别人用C语言写的,真的是太秀了,思路真的非常好,可以启发自己好多;
字符串的统计问题,把字符串的字符弄到数组里,注意字符“0”转换为int型为它的ASCII码“48”,因此数字要减去48。此处数组a[]的下标正好与数字同步。

include<stdio.h>

include <string.h>

int main()
{ char s[1005];//定义一个字符串数组
int a[15]={0};//这里是为了存储0-9的出现次数,其实定义为10也是可以的。
int len,t;
scanf("%s",s);
len=strlen(s);//字符串长度
t=0;
for(int i=0;i<len;i++)
{
t=s[i]-48;//因为每一位数都只能是0-9,并且0对应的ASCII码值是48,此处字符0的48-48是为了回到ASCII码的0处(也就是null)1,2,3...以此类推。其目的是为了使其变回数字类型0,1,2.....。
a[t]++;//此处以数组的每一个元素记录一个数值的出现次数。
//printf("gg: %d,%d\n",t,i);
}

    for(int j=0;j<10;j++)
    {
        if(a[j]!=0)//判断出现次数不为0才进入条件
        {
            printf("%d:%d\n",j,a[j]);//打印每一个出现次数不为0的数字的次数。注意因为记录数组与循环条件j是同步的,所以可以直接一一对应打印出次数。
        }
    }
}

作者:lostwall
来源:CSDN
原文:https://blog.csdn.net/lostwall/article/details/60579872
版权声明:本文为博主原创文章,转载请附上博文链接!

真的写的太好了,我只是在原有的基础上加上自己的一些注释,和对程序的理解。

转载于:https://www.cnblogs.com/yinanweike/p/10714014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值