东北大学2021年c语言编程题第二题

解题思路:这个字符串要达到去除大小写的重复,同时达到排序的效果,因为本身字母的排序就类似于数字的去重排序,可以通过一个哈希表,来存储每个字母的存储情况,如果哈希表对应存储的1,代表存储的该字母是大写形式,如果存储的2,则该字母是小写形式,如果是0则表示该字母未出现

1:定义一个大小为26的哈希数组,因为有26个字母,定义一个字符指针cur指向字符数组str,通过cur的移动达到遍历字符数组的效果

2:访问的while条件是cur指针未遇到字符数组结束符\0,开始遍历,如果当前字母的ascii>a的码值即是小写,并且harshTable里下标为当前小写字母-'a'的值对应为0,即从未出现过,则首先赋值为1,因为如果出现了大写字母,必须输出大写字母(harshTable[chrElem-'a']就是为了避免最开始有大写字母,赋值为2后,出现了小写字母又赋值为1,因为题目要求去出重复的小写字母,故只能1转换为2,不能2转换为1),将小写字母作为去重处理,故如果后面出现了大写字符,harshTable里对应元素必须更新为2,(else if里的判断,如果出现了大写字母,则对应下标为  当前字母-'A'或  当前字母+32-'a'  的值需要更新值为2),然后cur指针++,指向下一个字符数组里的下一个字符

**这个哈希表的操作就可以达到去重,再从哈希表头开始遍历输出值不是0的元素,就可以同时达到排序和去重的效果

3:从头开始遍历哈希表:如果harshTable的值是1,则代表只出现了小写的字母,先printf("%c",'a'+i),输出该小写字母,如果harshTable的值是2,则代表出现了大写字母就一定要输出大写的,printf("%c",'A'+i)来输出大写的字母,从头开始遍历就是从A-Z进行了出现过字符的排序

**用到了'a或者A'+i 来表示输出字符的形式,再东大考研中很常见需要谨记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值