还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
青岛农业大学理学与信息科学学院高级语言课程设计报告设计题目______________文本编辑器学生专业班级__________计算机科学与技术学生姓名(学号)_________________________________________设计小组其他同学姓名(学号)指导教师______________________________________________完成时间_____________2011-11-03设计地点______________信息楼机房2011年11月05日printfnThe total shuzi is:\t%d\nH,num;/*统计所有字符*/zifu=countword32,44-Fnum+countword59,94+countword97,l26+countwordl74,175;printfnThe totalzifu is:\t%d\r^,zifu+space;/*字符串的查找*/printfH\nplease inputa srting:\tn;scanfn%sn s;9n=czs;printfn\nThe string%s chuxian%d ci\nH,s,n;getchar;/*字符串的删除*/printfH\nWhich stringdo you want todel:\nn;printfHplease inputa string:\tn;scanfH%sn,s;printfn\nBefore delstring%s:\nn,s;out;n=czs;ifn==0printfn\nCan,t findthe string!\nn;else{dels;printfn\nAfter delstring%s:\n”,s;out;}
2.程序运行说明运行说明程运行序后,先出现一蓝色背景,面有三句话」Where do you wantthefile come from Fromwenjian please input1;from keybrodplease input2”,⑴如果选择1,则从设定的文件中读入数据;如果选择2,则从键盘输入数据,直到遇到@@时结束然后按回车键,则出现文本内容
(2)继续按回车键,出现下例字符“please inputa string”,然后在屏幕上分四行显示文字,空格,数字,字符的数目;
(3)然后按回车键,在屏幕上出现某一字符出现的次数;
(4)按回车键,出现Which stringdo you want todel:,please inputa string”输入要册!]除的字符;
(5)按回车键,出现“Before delstring,显示未删除时的文本内容,继续回车,出现“After delstring,则在屏幕上显示删除某一字符后的文本内容,到此运行结束结果说明运行结果如下图所示R TC.EXEplease inputa srtingastotal wordis12total space is1The stringas chuxian1citotal shuziis10Which stringdoyouviant todelplease inputa stringsBefore delstring sfsafsd1234567890After delstring sfafd
1234567890..J99ad da前TC.EXEWhere doyouwantthe filecone fromFrom weijianplease input1From keybrodplease input22please inputthe fileuntill Pfsafsd1234567890asd sdaThefiles contentfsafsd1234567890please inputa srtingtotal wordis12total spaceis1totalshuziis10TTTTTTTT
3.存在的I可题:1调试时用键盘输入文章内容的语句为getssl,若要换成scanf%s”,sl;将会出现不能输入空格的问题所以在进行输入时要使用正确的输入语句不然就会出现这样那样的问题删除某一字符串算法的时间复杂度最大,原因在于每删除一个字符都要进行前移操作,占用了大量时间假如在进行删除时进行同时前移strlens个字符,可能会减少一些时间2在设计子串搜索的方法时,采用了将子串的首字符和整个字符串的每个字符逐个比对的算法,但是有时通过前一次的比较可得知接下来的字符与子串显然不匹配,但程序依然会去一一比较它们.这就产生了一些冗余的计算,尤其是子串本身比较长的时候,冗余的计算量会变得十分大,这个算法有待改进.
四、总结与体会在对程序的各个功能模块进行测试时未发生错误,程序的运行结果也基本达到了预期的设计效果,可认为该程序已基本达到了课题的要求.此次课程设计使我对数据结构方面的知识有了更加深入的了解,也使我认识到自己在学习编程方面还有很多的不足今后我要多读一些编程方面的书籍,不能只拘泥于课本上的知识,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想同时,此次课程设计也使我对编程产生了兴趣,特别是在通过查书籍资料以及网上资源的情况下能够使程序运行成功,得到了一种成就感,相对于以前的一组人完成一个程序,此次一个人独立完成成就感更大一些通过这次课程设计,我受益匪浅,一是通过实际应用,加深了对链表这一数据结构的理解;二是让我进一步掌握了使用C语言进行程序设计的方法.在这次的程序设计过程中,对C语言中的部分知识点有了更进一步的认识,在以后的学习中有必要进一步理解和掌握它课程设计成绩评定表学生姓名专业班级计算机科学与技术设计题目文本编辑器指导教师评语及意见:指导教师评阅成绩:指导教师签字:
一、课程设计目的和任务为了方便处理文本内容,减少在处理文本时的额外活动,设计了本程序比如在统计文本中的中英文字母数和空格数以及整篇文章的总字数时,可以利用本程序,这样比较方便、省时又比如统计某一字符串在文章中出现的次数,并输出该次数,也可利用本程序还可以利用本程序将文本的某一子串删除并将后面的字符前移
二、分析与设计
1.程序的基本功能1分别统计出其中英文字母数和空格数以及整篇文章的总字数2统计某一字符串在文章中出现的次数,并输出该次数3删除某一子串,并将后面的字符前移
2.系统总框图
1、统计字符个数算法流程图
2、删除某一字符串算法流程图
3、查找某一字符串出现的次数算法流程图
3.定义的函数及说明此程序由12个函数构成1存储结构char wz[N]
[80]存储文章的字符数组,为全局变量2输入函数readdat通过此函数从文件中读取文本3输出函数out将文本内容输出4字符数统计函数int countwordint nl,int n2统计ASC码在nl与n2之间的字符5字符串出现次数统计函数int czchar*s查找某一字符串出现的次数6字符删除函数void delchar*s删除要删除的字符串7主函数void main通过主函数调用各个子函数完成程序功能8文件函数openE:/yy/wzin.dat,r+打开文件9字符串位置函数strstrwz[i],s;字符串s在文章第i行首次出现的位置10字符串长度函数strlenwz[i];文章第i行的长度11字符串比较函数strcmpsl,@@”比较字符串内容当为@@时停止输入12字符串复制函数strcpywz[i],sl;/*将si中的内容复制到wz[i]中
4.算法设计:本程序要求储存结构为线性表结构,可以输入大小写的英文字母,任何数字和标点符号输出的时候要分行输出用户输入的各行字符,分四行输出“全部字符数”“数字的个数”“空格个数”“文章总字数”及输出删除某一字符串后的文立早
三、系统实施
1.源程序代码#includestdio.h#includestring.h#define N20/*文章的行数*/char wz[N]
[80];/*存储文章的字符数组,为全局变量*//*输入函数*/void readdat{FILE*fp;int ij,len;char*str;if!fp=6^已11”丘勺丫刖2m.12匕”注”/*打开文件*/printfHThe filecant found!\nH;fori=0;iN;i++fgetswz[i],80,fp;/*读文件*//*输出函数*/void out{int i=0;fori=0;iN;i++printfn%sM,wz[i];int countwordint nl,int n2/*统计ASC码在nl与n2之间的字符*/{int ijjen;int n=0;/*统计字符数*/fori=0;iN;i++{len=strlenwz[i];forj=0;j=len;j++ifwz[i][j]=nlwz[i[U]=n2/*wz[i][j]的ASC码在nl与n2之间,n++*/n++;return n;int czchar*s/*查找某一字符串出现的次数*/{intn=0;int i;inMens;/*要查找字符串*S的长度*/char*c;lens=strlens;fori=0;iN;i++{c=strstrwz[i],s;/*字符串*S在文章第i行第一次出现的位置*/while*c!=O{n++;c=strstrc+lens,s;/*字符串*S在文章第i行下一次出现的位置*/}return n;void delchar*s{int i,j,k,lenijenc,lens;intp;char*c;lens=strlens;/*要删除字符串的长度*/fori=0;iN;i++{c=strstrwz[i],s;/*字符串s在文章第i行首次出现的位置*/whilec!=0/*c=0则表明字符串s在文章第i行没有出现*/{leni=strlenwz[i];/*文章第i行的长度*/lenc=strlenc;/*从字符串s在文章第i行首次出现的位置处后的字符串的长度*/p=leni-lenc;/*两个长度的差从此行的第p个位置开始删除*/fork=l;k=lens;k++/*删除lens次*/{forj=p;j=leni;j++wz[i][j]=wz[i][j+l];/*字符前移*/leni=strlenwz[i];wz[i]U-l]=\O;leni=strlenwz[i];}c=strstrwz[i],s;main{int word,space,num,zifu;/*字母数,空格数,数字数,字符数*/intn;/*某字符串数*/int leni;int i=0J=0;char sl[8O],*s;printfnWhere doyouwantthe filecomefrom\n;/*从文件读入数据,或从键盘输入数据*/printfnFrom weijianplease input1\nfrom keybrodpleaseinput2\nn;/*从文件读入数据输入1,还是从键盘输入数据输入2*/scanfM%dH,n;getchar;switchn{case1:readdat;break;case2:printfHplease inputthe fileuntill@@\nn;getssl;whilestrcmpsl/@@n!=OiNstrcpywz[i],sl;/*将si中的内容复制到wz[i]中*/leni=strlensl;wz[i][leni]-\nf;getssl;;i++break;default:printfnWrong input!\nn;break;}printfnThe filescontent:\n;out;word二countwordCaz+countwordA,Z;/*统计字母*/printfn\nThe totalwordis:\t%d\nH,word;space二countword「「;/*统计空格*/printfHThe totalspaceis:\t%d\nn,space;num=countword079;/*统计数字*/。