PAT 1042 字符统计 解题思路 笔记

基于c语言解题思路,首先需要使用gets()函数来获取输入的字符串,因为题目要求最大为1000个字符所以定义一个char类型的函数大小为1001.也就是char b[1001];

要获取字符串中最大出现最多的那个字符:先要定义一个指针p指向字符串b; 也就是*p=b; 

定义指针的目的是为了指向字符串b,那么就可以再定义一个数组int a[200]={0};用于存放每个字符的个数;因为每个字母所对应的阿斯科码一般是不超过200的所以定义一个大小为200的int 型数组。数组内存放的是每个阿斯科码对应出现的个数,也就是从零到两百的阿斯科码中,这些阿斯科码出现的次数;有了这个函数就可以实现对字符串中数据的统计;

此时指针p已经指向了我们输入的字母串b;想要判断字符串中的字母是位于A-Z之间还是a-z之间,因为题目要求的是不区分大小写的进行统计,输出结果也是小写的。所以要加一个判断的语句。也就是if('A'<*p && *p<'Z');如果当前的字符是大写的,就需要转换成小写的然后存储到数组a中也就是执行下列两个步骤:1、*p=*p-'A'+'a'; 2、a[*p]++; 第一步将当前字符的阿斯科码减去大写A的阿斯科码再加上小写a的阿斯科码 就可以得到当前字符在小写的阿斯科码。然后放入数组a当中自加一;如果当前的是小写的字符就不需要执行步骤1了,直接执行步骤2;最后指针向后移一位,即p++;

最后需要在数组a当中找出数值最大的那一个;这时候需要定义两个变量来存放输出的结果,这里定义为max,k;

查阿斯科码表可以得到小写a 到小写z的数值是在97和122之间;

定义一个循环来接这个数组里面的最大值;

for(int i=97;i<122;i++){

if(a[i]>max)

max=a[i];  //记录下最大的值

k=i;         //同时记录下当前最大值所对应的阿斯科码

}


最后只要输出k 和max就可以得到所需要的结果。


源码可以参考这篇文章:https://blog.csdn.net/qq_30331643/article/details/52444983

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值