第37讲统计一行字符串中每个小写英文字符出现的次数.docVIP

第37讲统计一行字符串中每个小写英文字符出现的次数.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第37讲统计一行字符串中每个小写英文字符出现的次数

第37讲 统计一行字符串中每个小写英文字符出现的次数 类型 必修题 趣味性*** 难度** 讨论:通过统计一篇长篇文章中每个汉字使用的频率,基本上可以断定此篇文章是不是某个著名作家写的。也就是说,每个人都有他特定的用字频率谱。每个人之间的用字频率谱与他的指纹、笔迹类似,也是确认文章作者身份的一个标志。此题是解决这一类问题的基础。 准备工作:可以事先将26个英文字符依次存放在一个字符数组中,即将: ‘a’→ch[0] ‘b’→ch[1] … ‘z’→ch[25] 然后用num[0]来统计(累加)小写字符‘a’出现的次数。 用num[1]来统计(累加)小写字符‘b’出现的次数。 …… 用num[25]来统计(累加)小写字符‘z’出现的次数。 一级算法: (1)将26个英文字符依次存放在一个字符数组中 (2)从键盘输入一行字符存到字符串str中 (3)i=0; (4)while (字符串未完) { 让j从0变化到25,如果str[i]与某个ch[j]匹配(即相等),那么num[j]++; ① i++; ② } (5)输出每个字符出现的次数。 其中①和(5)需要进一步求精。 ①的二级求精: 让j从0变化到25,如果str[i]与某个ch[j]匹配,那么num[j]++; for(j=0;j=25;j++) { if (ch[j] == str[i]) num[j]++; } 第(5)步的二级求精: 输出每个字符出现的次数 for (i=0;i=25;i++) { printf(“小写字符%c出现的次数是%d\n”,ch[i],num[i]); } 转换成C语言的程序如下: 1 #includestdio.h 2 3 int main() 4 { 5 char ch[26]; 6 int num[26]; 7 int i,j; 8 char str[100]; 9 10 /*事先将26个英文字符依次存放在一个字符数组ch[]中,将num[]清0*/ 11 chr=a; 12 i=0; 13 while (i=25) 14 { 15 ch[i]=chr; 16 num[i]=0; 17 chr=chr+1; 18 i++; 19 } 20 scanf(%s,str); 21 i=0; 22 while(str[i]!=’\0’) 23 { 24 for(j=0;j=25;j++) 25 { 26 if (str[i]==ch[j]) 27 num[j]++; 28 } 29 i++; 30 31 } 32 /*输出每个字符出现的次数*/ 33 for(i=0;i=25;i++) 34 { 35 printf(字符%c出现的次数是%d\n,ch[i],num[i]); 36 } 37 } 点评查表法的使用 此题的解法中,实际上用两个数组联合起来,构成了一张字符出现次数表(更为简洁的方式是用一个结构数组来构成一张查找表,而不是用两个存放简单变量的数组,参见第8章的8.1节),见表5.1。 表5.1 各字符出现的次数 数组下标 ch[ ]中依次存放英文字母 num[ ]中存放字母出现的次数 0 ‘a’ num[0] 存放的字母‘a’出现的次数 1 ‘b’ num[1] 存放的字母‘b’出现的次数 2 ‘c’ num[2] 存放的字母‘c’出现的次数 3 ‘d’ num[3] 存放的字母‘d’出现的次数 … … … 24 ‘y’ num[24] 存放的字母‘y’出现的次数 25 ‘z’ num[25] 存放的字母‘z’出现的次数 每读入文章中的一个字符,即可查找此字符与下标值为多少的ch[i]的数组元素相等(用来确定到底是出现了哪个字符),然后把对应i值的num[i]的值加1——即出现的字符数加1。利用查表法,可以把一些多分支的选择结构转换为循环结构。 问题1. 是否可用查表法来实现所有的多分支结构?如果不能实现所有的多分支结构,那么指出何种情况下可用查表法来实现多分支结构(请参考《代码大全》一书对此问题的讨论)? 问题2. 是否可以删掉第11行、第15行和第17行,而把第5行改为: char ch[26]=“abcdefghijklmno

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档