您好,欢迎访问三七文档
中北大学数据结构课程设计说明书学生姓名:学号:学院:专业:题目:串的查找与替换指导教师尹四清2011年12月30日11.设计目的《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2.设计面内容与要求设计内容:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。设计要求:(1)符合课题要求,实现相应功能;(2)操作方便易行;(3)注意程序的实用性、安全性;3.本设计所采用的数据结构3.1数组数组在编程应用时调用很方便随意,但在更改数组时比较麻烦必须调用数组中的所有元素。charkeyWords[SIZE];charcopyWords[SIZE];charstrOne[MAXLEN];charstrTwo[MAXLEN];3.2串的匹配2if(keyWords[0]==strOne[i])if(keyWords[j]!=strOne[countFlag++])4.功能模块详细设计4.1详细设计思想a)需求分析打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。b)概要设计程序头设计对程序作简单介绍以及输出程序制作人的基本信息。main(){printf(\n\n\n\t\t\t数据结构课程设计\n);printf(\n\t\t\t题目:串的查找与替换\n);printf(\n\t\t\t专业:机电一体化软件开发与应用\n);printf(\n\t\t\t学号:0921040836\n);printf(\n\t\t\t姓名:张胜东);printf(\n\t程序作用:打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。);printf(\n************************************\n);}主函数voidmain()通过for循环对字符串进行匹配,找到匹配的单词然后将copy的单词字符放入strTwo数组中,不匹配的单词也放入数组strTwo中完成替换,最后把strTwo中的字符放回文件中完成操作。C)设计思想串的查找与替换要实现的功能是:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。首先实现程序比较简单的功能,即:输入要替换的单词和给定单词3gets(keyWords);gets(copyWords)。然后实现程序打开文件的功能。最后编写最核心的替换功能,首先用关键字来匹配要查找的单词,第一个单词匹配上的话再判断这个关键字在不在单词的首字母上,否则不匹配,主要是要实现替换单词的功能不替换其他单词中的字符串。然后匹配第二个字母,这样一次类推的判断。不匹配的单词直接放入strTwo数组中,匹配的单词先替换然后再放入strTwo数组中。4.2核心代码打开文件if((fp=fopen(filename,r))==NULL){printf(文件打开失败!\n);exit(0);}查找和替换单词while(!feof(fp))/*读文件*/{strOne[countOne++]=fgetc(fp);/*这是从指定稳中取得一个字符strOne[countOne++]=fgets(fp);这是从指定文章中取得一个字符串*/}countOne--;/*减去最后一个文件结束字符*/for(i=0;icountOne;i++){if(keyWords[0]==strOne[i]){if((''==strOne[i-1])||('\n'==strOne[i-1])||(0==i)){flag=1;countFlag=i+1;4for(j=1;keyWords[j]!='\0';j++){if(keyWords[j]!=strOne[countFlag++])/*是否匹配*/{flag=0;break;}}if((''==strOne[countFlag])||('\n'==strOne[countFlag])||(EOF==strOne[countFlag]))/*2.检查单词后的一个字符*/{if(1==flag)/*若匹配,则进行拷贝*/{i=countFlag-1;for(j=0;copyWords[j]!='\0';j++){strTwo[countTwo++]=copyWords[j];}}}else/*另外*/{strTwo[countTwo++]=strOne[i];}}5else/*另外*/{strTwo[countTwo++]=strOne[i];}}else/*另外*/{strTwo[countTwo++]=strOne[i];}}4.3调试分析图1程序开始的界面6图2输入要查找和替换的单词图3输入要打开的文件名75.课程设计心得及存在问题心得:通过这次做课程设计,发现了学习中的很多问题,平时学习的东西在做起来时有很大的困难,独立构思一个程序很难,不像平时看程序一样简单。想出来程序结构后,就一个简单的打开文件就费了好大的劲,运行几次都出现了异常,最后找学长请教才学会使用exit()命令。核心程序就更复杂了,做了很久都没头绪,最后在一位学长的辅助下完成了核心程序。存在问题:刚开始实现的功能是先输入要查找和替换的单词,再输入要打开的文件,做完程序后想把打开文件的程序放到前面,可换位置后就一直出错。5.源程序#includestdio.h#includestdlib.h#defineSIZE20/*查找单词字符和输入替换单词少于20*/#defineMAXLEN10000/*文章字符不大于10000*/voidmain(){inti,j;8intflag;/*用于标记匹配单词*/intcountFlag;/*用于检查匹配计数*/intcountOne=0;/*记录未改文章字符个数*/intcountTwo=0;/*记录改后文章字符个数*/charkeyWords[SIZE];/*查找单词*/charcopyWords[SIZE];/*替换单词*/charstrOne[MAXLEN];/*将未改文章的所有字符储存在里面*/charstrTwo[MAXLEN];/*将改后文章的所有字符储存在里面*/charfilename[20];/*输入的文件名的字符个数*/{printf(\n\n\n\t\t\t数据结构课程设计\n);printf(\n\t\t\t题目:串的查找与替换\n);printf(\n\t\t\t专业:机电一体化软件开发与应用\n);printf(\n\t\t\t学号:0921040836\n);printf(\n\t\t\t姓名:张胜东);printf(\n\t程序作用:打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。);printf(\n******************************************************************************\n);}FILE*fp;printf(请输入要查找的单词:);gets(keyWords);printf(请输入要替换的单词:);gets(copyWords);printf(请输入要打开的文件名:);9scanf(%s,filename);if((fp=fopen(filename,r))==NULL)/*读文件,前边的就是输入的文件名,后边是指只读read*/{printf(文件打开失败!\n);exit(0);}while(!feof(fp))/*读文件*/{strOne[countOne++]=fgetc(fp);/*这是从指定稳中取得一个字符strOne[countOne++]=fgets(fp);这是从指定文章中取得一个字符串*/}countOne--;/*减去最后一个文件结束字符*/for(i=0;icountOne;i++){if(keyWords[0]==strOne[i])/*判断查找单词第一个字符是否匹配*/{if((''==strOne[i-1])||('\n'==strOne[i-1])||(0==i))/*1.检查单词前的一个字符*/{flag=1;countFlag=i+1;for(j=1;keyWords[j]!='\0';j++){if(keyWords[j]!=strOne[countFlag++])/*是否匹配*/10{flag=0;break;}}if((''==strOne[countFlag])||('\n'==strOne[countFlag])||(EOF==strOne[countFlag]))/*2.检查单词后的一个字符*/{if(1==flag)/*若匹配,则进行拷贝*/{i=countFlag-1;for(j=0;copyWords[j]!='\0';j++){strTwo[countTwo++]=copyWords[j];}}}else/*另外*/{strTwo[countTwo++]=strOne[i];}}else/*另外*/{strTwo[countTwo++]=strOne[i];}}11else/*另外*/{strTwo[countTwo++]=strOne[i];}}fclose(fp);if((fp=fopen(filename,w))==NULL)/*写入文件*/{printf(文件打开失败!\n);exit(1);}for(i=0;icountTwo;i++)/*写入文件*/{fputc(strTwo[i],fp);}fclose(fp);}
本文标题:串的查找与替换
链接地址:https://www.777doc.com/doc-5835245 .html