版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青岛农业大学理学与信息科学学院高级语言课程设计报告设计题目文本编辑器学生专业班级计算机科学与技术学生姓名(学号)设计小组其他同学姓名(学号)指导教师完成时间2011-11-03设计地点信息楼机房2011年11月05日
一、课程设计目的和任务
为了方便处理文本内容,减少在处理文本时的额外活动,设计了本程序。比如在统计文本中的中英文字母数和空格数以及整篇文章的总字数时,可以利用本程序,这样比较方便、省时。又比如统计某一字符串在文章中出现的次数,并输出该次数,也可利用本程序。还可以利用本程序将文本的某一子串删除并将后面的字符前移。二、分析与设计1.程序的基本功能:(1)分别统计出其中英文字母数和空格数以及整篇文章的总字数。(2)统计某一字符串在文章中出现的次数,并输出该次数。(3)删除某一子串,并将后面的字符前移。2.系统总框图:(1)、统计字符个数算法流程图i=0n=0i=0n=0i<Ni>=Nj=0len=strlen(wz[i])j<lenj>=lenif(wz[i][j]>=n1&&wz[i][j]<=n2)n++j++i++returnn算法结束(2)、删除某一字符串算法流程图i++;i=0n=0i++;i=0n=0i<Ni>=Nc=strstr(wz[i],s)c!=0c=0leni=strlen(wz[i]);lenc=strlen(c);p=leni-lencreturnn算法结束for(k=1;k<=lens;k++){for(j=p;j<=leni;j++)wz[i][j]=wz[i][j+1];leni=strlen(wz[i])wz[i][j-1]='\0';leni=strlen(wz[i]);}(3)、查找某一字符串出现的次数算法流程图i=0n=0i=0n=0i<Ni>=Nc=strstr(wz[i],s)c!=0c=0c=strstr(c+lens,s)n++i++returnn算法结束3.定义的函数及说明:此程序由12个函数构成。
(1)存储结构:charwz[N][80]存储文章的字符数组,为全局变量(2)输入函数:readdat()通过此函数从文件中读取文本(3)输出函数:out()将文本内容输出(4)字符数统计函数:intcountword(intn1,intn2)统计ASC码在n1与n2之间的字符(5)字符串出现次数统计函数:intcz(char*s)查找某一字符串出现的次数(6)字符删除函数:voiddel(char*s)删除要删除的字符串(7)主函数:voidmain()通过主函数调用各个子函数完成程序功能(8)文件函数open("E:/yy/wzin.dat","r+")打开文件(9)字符串位置函数strstr(wz[i],s);字符串s在文章第i行首次出现的位置(10)字符串长度函数strlen(wz[i]);文章第i行的长度(11)字符串比较函数strcmp(s1,"@@")比较字符串内容当为@@时停止输入(12)字符串复制函数strcpy(wz[i],s1);/*将s1中的内容复制到wz[i]中4.算法设计:本程序要求储存结构为线性表结构,可以输入大小写的英文字母,任何数字和标点符号。输出的时候要分行输出用户输入的各行字符,分四行输出“全部字符数”“数字的个数”“空格个数”“文章总字数”及输出删除某一字符串后的文章。三、系统实施1.源程序代码#include<stdio.h>#include<string.h>#defineN20/*文章的行数*/charwz[N][80];/*存储文章的字符数组,为全局变量*//*输入函数*/voidreaddat(){FILE*fp;inti,j,len;char*str;if(!(fp=fopen("E:/yy/wzin.dat","r+")))/*打开文件*/printf("Thefilecan'tfound!\n");for(i=0;i<N;i++)fgets(wz[i],80,fp);/*读文件*/}/*输出函数*/voidout(){inti=0;for(i=0;i<N;i++)printf("%s",wz[i]);}intcountword(intn1,intn2)/*统计ASC码在n1与n2之间的字符*/{inti,j,len;intn=0;/*统计字符数*/for(i=0;i<N;i++){len=strlen(wz[i]);for(j=0;j<=len;j++)if(wz[i][j]>=n1&&wz[i][j]<=n2)/*wz[i][j]的ASC码在n1与n2之间,n++*/ n++;}returnn;}intcz(char*s)/*查找某一字符串出现的次数*/{intn=0;inti;intlens;/*要查找字符串*S的长度*/char*c;lens=strlen(s);for(i=0;i<N;i++){c=strstr(wz[i],s);/*字符串*S在文章第i行第一次出现的位置*/ while(*c!=0){n++;c=strstr(c+lens,s);/*字符串*S在文章第i行下一次出现的位置*/}}returnn;}voiddel(char*s){inti,j,k,leni,lenc,lens;intp;char*c;lens=strlen(s);/*要删除字符串的长度*/for(i=0;i<N;i++){c=strstr(wz[i],s);/*字符串s在文章第i行首次出现的位置*/while(c!=0)/*c=0则表明字符串s在文章第i行没有出现*/{leni=strlen(wz[i]);/*文章第i行的长度*/lenc=strlen(c);/*从字符串s在文章第i行首次出现的位置处后的字符串的长度*/ p=leni-lenc;/*两个长度的差从此行的第p个位置开始删除*/for(k=1;k<=lens;k++)/*删除lens次*/ { for(j=p;j<=leni;j++) wz[i][j]=wz[i][j+1];/*字符前移*/leni=strlen(wz[i]);wz[i][j-1]='\0';leni=strlen(wz[i]);}c=strstr(wz[i],s);}}}main(){intword,space,num,zifu;/*字母数,空格数,数字数,字符数*/intn;/*某字符串数*/intleni;inti=0,j=0;chars1[80],*s;printf("Wheredoyouwantthefilecomefrom?\n");/*从文件读入数据,或从键盘输入数据*/printf("Fromweijianpleaseinput1\nfromkeybrodpleaseinput2\n");/*从文件读入数据输入1,还是从键盘输入数据输入2*/scanf("%d",&n);getchar();switch(n){case1: readdat(); break;case2: printf("pleaseinputthefileuntill@@\n");gets(s1); while(strcmp(s1,"@@")!=0&&i<N) { strcpy(wz[i],s1);/*将s1中的内容复制到wz[i]中*/ leni=strlen(s1); wz[i][leni]='\n';gets(s1); i++;} break;default: printf("Wronginput!\n"); break;}printf("Thefile'scontent:\n");out();word=countword('a','z')+countword('A','Z');/*统计字母*/printf("\nThetotalwordis:\t%d\n",word);space=countword('','');/*统计空格*/printf("Thetotalspaceis:\t%d\n",space);num=countword('0','9');/*统计数字*/printf("Thetotalshuziis:\t%d\n",num);/*统计所有字符*/zifu=countword(32,44)+num+countword(59,94)+countword(97,126)+countword(174,175);printf("Thetotalzifuis:\t%d\n",zifu+space);/*字符串的查找*/printf("\npleaseinputasrting:\t");scanf("%s",s);n=cz(s);printf("\nThestring%schuxian%dci\n",s,n);getchar();/*字符串的删除*/printf("\nWhichstringdoyouwanttodel:\n");printf("pleaseinputastring:\t");scanf("%s",s);printf("\nBeforedelstring%s:\n",s);out();n=cz(s);if(n==0)printf("\nCan'tfindthestring!\n");else{del(s);printf("\nAfterdelstring%s:\n",s);out();}}2.程序运行说明运行说明:程运行序后,先出现一蓝色背景,面有三句话:"Wheredoyouwantthefilecomefrom?Fromwenjianpleaseinput1;fromkeybrodpleaseinput2",(1)如果选择1,则从设定的文件中读入数据;如果选择2,则从键盘输入数据,直到遇到@@时结束。然后按回车键,则出现文本内容。(2)继续按回车键,出现下例字符“pleaseinputastring”,然后在屏幕上分四行显示文字,空格,数字,字符的数目;(3)然后按回车键,在屏幕上出现某一字符出现的次数;(4)按回车键,出现“Whichstringdoyouwanttodel:,pleaseinputastring”输入要删除的字符;(5)按回车键,出现“Beforedelstring”,显示未删除时的文本内容,继续回车,出现“Afterdelstring:”,则在屏幕上显示删除某一字符后的文本内容,到此运行结束。结果说明:运行结果如下图所示:3.存在的问题:(1)
调试时用键盘输入文章内容的语句为gets(s1),若要换成scanf(“%s”,s1);将会出现不能输入空格的问题。所以在进行输入时要使用正确的输入语句不然就会出现这样那样的问题。删除某一字符串算法的时间复杂度最大,原因在于每删除一个字符都要进行前移操作,占用了大量时间。假如在进行删除时进行同时前移strlen(s)个字符,可能会减少一些时间。(2)在设计子串搜索的方法时,采用了将子串的首字符和整个字符串的每个字符逐个比对的算法,但是有时通过前一次的比较可得知接下来的字符与子串显然不匹配,但程序依然会去一一比较它们.这就产生了一些冗余的计算,尤其是子串本身比较长的时候,冗余的计算量会变得十分大,这个算法有待改进.四、总结与体会在对程序的各个功能模块进行测试时未发生错误,程序的运行结果也基本达到了预期的设计效果,可认为该程序已基本达到了课题的要求.此次课程设计使我对数据结构方面的知识有了更加深入的了解,也使我认识到自己在学习编程方面还有很多的不足。今后我要多读一些编程方面的书籍,不能只拘泥于课本上的知识,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想。同时,此次课程设计也使我对编程产生了兴趣,特别是在通过查书籍资料以及网上资源的情况下能够使程序运行成功,得到了一种成就感,相对于以前的一组人完
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师校本培训
- 关于医疗简单的认识
- 教育学职业规划
- 2024年度仓储物流服务合同:智能化仓储管理系统建设与运营2篇
- 2024版音乐制作与定制服务合同2篇
- 医院护理员身体清洁培训
- 医院合作协议
- 2024护理带教述职报告
- 2024版新能源汽车充电桩建设项目合同3篇
- 2024年度股权转让合同股权比例分配协议3篇
- 小学儿童心理学全套教学课件
- 工业气体充装站建站项目建设申请建设可研报告
- 智慧人社大数据平台项目整体解决方案
- 医学影像诊断学习题集
- 东莞市数据中心中央空调施工方案
- 道路运输企业两类人员安全考核题库题库(1020道)
- 科室医院感染管理小组名单及职责
- 数据要素市场化配置探索:理论与实践
- 渡槽基础微课
- 如何加强高速公路收费站管理
- CCS船级社认可试验大纲
评论
0/150
提交评论