- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告
姓名 方元元 学号一、题目
统计c源程序中的关键字出现的频率
二、算法思想描述
本程序是扫描一个c源程序,有Hash表存储程序中出现的关键字,并统计该程序中的关键字出现的频度。用线性探测法解决Hash冲突。设Hash函数为:Hash(key)=[(key的第一个字母序号)*100+(key的最后一个字母序号)] MOD 41。
算法思想如下:
建立一个结构体数组的hash表,存放读入的关键字和其出现的次数。先初始化并建立该hash表,先初始化为”0”,0,再从文件中一个个读入所有关键字,存放在hash表中相应位置。
从另一文件中一行行读入,找出其中非注释中的,也非“”中的,长度2-8个字符的小写字符串,用hash查找,看该单词是否关键字,如是其出现次数加一,若不是就继续下一个这样的字符串,直至文件尾。在找这样的字符串途中,遇到无法匹配的单或双引号打印出出现在第几行。
Hash表建立好后打印出来。
其中核心算法分为两块:1.hash表的建立和hash查找。2.寻找上述的字符串。
1.建立Hash表的算法:
该函数实参为已建立的hash表和在c源程序中找到的一个小写字母字符串。
从该字符串key为下标处依次开始查找,到数组末尾是返回数组头(key=(key+1)%44;),分两种情况:
①若先找到空位,说明该字符串不是关键字。则不改变hash表。
②若先找到了该关键字的纪录,则该字符串是关键字,++hash[key].num;
2.寻找疑似关键字字符串的算法
功能:依次找出被非标识符且非”、//、/*、*/隔开的,长度为2-8个字符,非注释中的,也非“”中的小写字母字符串,因为它可能是关键字。
首先,一行行读入c源程序,用续行符相连的几行当一行一起读入。
(1)、case 0和case 1:双引号中的不算,跳过。
① “”匹配中,“……\”不算,“……\\”算。
②单引号中的双引号不算,而且单引号中不会有关键字,所以单引号中的也跳过。
③‘ ’匹配中,‘\’不算,‘\\’算
(2)、case 2:注释中的不算,跳过。分为/*……*/ //
①设一个标志符flag,当找到/* 但在该行没找到*/ 时,flag=1;此时在下行中寻找*/ ,以此类推,直至找到*/ 后flag=0,以后字符恢复有效。
②当找到//时放弃该行之后的所有字符,读入下一行……
(3)、case 3:读到大写字母、下划线或数字时,肯定该字符串不是关键字,则清除已存在s中的字符串,并跳过紧接在后面的允许在标识符中出现的字符。
(4)、case 4:读到的是小写字母,则存放到字符串s中。
(5)、case 5:本算法以除“、‘、//、/*、*/之外的不能在标识符中出现的字符隔开整行字符串,并判断被隔开的长度2-8个字符,不含大写字母、下划线、数字的字符串(即小写字母字符串)是否关键字,是则增加其统计个数(判断方法为hash查找)。
三、程序结构
如图,main()函数调用了四个子函数, chu_shi_hash()、create_hash()、Guan_Jian_Zi()、print()。
其中,chu_shi_hash()把hash表初始化为“0000” 0,标记空位,便于以后操作。C
create_hash()实现hash表的创建,从放关键字的文件一个个关键字,它调用了两个子函数,equal()判断两数组是否相等,用来确定某处是否空位.copy()把一个数组赋给另一数组,在确定插入位置插入该关键字。
Guan_Jian_Zi()从c源程序中依次找到可能是关键字的字符串,然后用hash查找判断它是否关键字,是则增加其统计次数。它调用了两个子函数:PanDuan(char) 和chang_hash(Hash,const char ch[]),前者用来判断一个字符的的类别,后者在hash表中查找判断ch[]是否关键字,是则增加其在hash表中的统计量。 而chang_hash()调用了函数equal(),用来确定某处是否空位或ch[]。
print(hash)用来打印hash表。
四、测试结果
先用一个短些的,便于数出关键字次数的program1.txt测试
其结果是:
经核对后,证明结果是正确的。于是又用一个大些的program.txt测试,结果是:
该c源程序能处理不匹配的“”或‘’,上面的测试故意在program.txt尾部设置不匹配的‘ 和“以测试该功能。
此程序统计的关键字不包括注释中的,字符串中的,续行符分开的,如in\
t 可以识别,在文件gjz.txt 中的关键字,编译器认定是关键字的,本程序也认为是
您可能关注的文档
- 小结:电控汽车的万用表检测.ppt
- 小米成功的根本原因分析(分享).ppt
- 13049在三相交流电路中,负载对称的条件是.doc
- ADAMSView和ADAMSCar的基础操作和心得.doc
- 小学二年级语文浅谈小学语文课堂教学中[1].ppt
- CT增强在闭合性腹部外伤中的诊断价值.doc
- 小学数学教学存在问题85607.ppt
- PTEN、uPA在原发性胃癌组织中的表达及相关性研究李佳.doc
- TI图形计算器在高中数学③中的应用.doc
- XS0102各类桥涵的特点.doc
- 2025北京海淀区初三一模英语试题及答案.pdf
- 常见急症急救处理【共36张PPT】.ppt
- 2025年职业技能培训效果评估指标体系在终身学习背景下的创新.docx
- 2025北京海淀区初三一模物理试题及答案.pdf
- 2025年职业技能培训效果评估与职业发展路径研究.docx
- 2025年塑料制品行业环保政策解读及市场动态分析报告.docx
- 2025年职业技能培训效果评估与职业培训师能力提升策略.docx
- 2025年塑料制品行业环保政策调整下的绿色生产技术发展报告.docx
- 2025年职业技能培训效果评估与职业教育人才培养质量提升.docx
- 2025年职业技能培训效果评估与职业教育国际化趋势研究.docx
最近下载
- 清水混凝土模板施工工艺.pdf VIP
- 清水混凝土施工工艺质量控制与防治演示文稿.ppt VIP
- GB50164-2021混凝土质量控制标准.docx VIP
- 文旅项目景区景点城市农文旅融合项目稻田主题策划规划方案【旅游】【文旅】【农旅】【文旅规划】.pptx VIP
- 混凝土结构工程施工质量验收规范(英文版).pptx
- 心血管科中医护理课件.pptx VIP
- 混凝土结构工程施工质量验收规范培训课件.pptx VIP
- 《混凝土结构工程施工质量验收规范》局部修订的条文及.docx VIP
- 2012混凝土结构工程施工质量验收规局部修订.doc VIP
- 《混凝土质量控制标准》XX50164-2011正文精华版.doc VIP
文档评论(0)