文本编辑器--C语言程序(共14页).doc
精选优质文档-倾情为你奉上 文本编辑器C语言课程设计报告目录1. 设计目的及要求 1.1设计目的 1.2设计要求 1.3题目解析2. 总体设计3. 详细设计 3.1流程图 3.2程序解析4. 调试分析5. 设计总结6. 心得体会7. 答辩记录8. 教师意见专心-专注-专业1.设计目的及要求1·1设计目的编一个程序对一个指定的文本文件进行处理,要具有统计功能,编辑功能以及查找功能等。1·2设计要求A) 读取一个指定文本文件,每行以回车结束,显示在屏幕上B) 统计功能:统计字符数,单词数,行数,并输出C) 编辑功能1) 将所有小写字母改成大写字母,将新的文本输出;2) 将所有大写字母改成小写字母,将新的文本输出;3) 输入被替换的字符串,及替换的内容,将新的文本输出;D) 查找功能1) 输入一个字符,在文本中查找是否存在该字符,若存在,统计 其个数,并将信息输出;2) 输入一个单词,在文本中查找是否存在该字符,若存在,统计其个数,并将信息输出;1.3题目解析课程的第一要求就是读取一个指定的文本文件,而且之后还有对字符串,字符数组的运用,所以要使用文本函数将文本中的字符输入到字符数组中。完成第一步之后就是对字符串的处理了。2·总体设计因为是对指定的文本文件进行处理,所以需要首先运用fscanf函数将文本文件中的字符读入到指定的数组中,然后才能进行处理。对于字符串的处理,首先在头文件中使用#include<stdio.h>,因为下文要使用有关字符串的函数。具体的要用到strlen函数。3·详细设计3·1流程图Fscanf函数将指定的文本文件中的内容读入指定的字符数组中。根据读入数组的字符个数统计出一共字符的个数,再统计出空格和回车的个数,最后两者之差就是字符的个数。输入4输入需要被替换的字符或字符串输入替换的字符或字符串进行替换输入3将所有大写字母变成小写字母输入2将所有小写字母变成大写字母输入1查找统计单词或字符的个数运用switch函数,让运行者选择所需要的功能统计单词的个数,行数3.2程序解析因为下文要运用到字符串函数,所以运用#include<stdio.h>头文件#include<stdio.h>#include<string.h>void main()预先定义整形和字符型变量char file30="0",m15="0"/file是文件地址,m是下面case 1里用的int c,n,s;/c用于switch,n,s是case 1里用的printf("请输入源文件地址:");scanf("%s",file);char a2000="0",b2000="0"FILE *fp=fopen(file,"r");/这是打开文件并把文件地址指针给fpif(!fp)/若是没能打开则运行printf("源文件不存在或地址输入错误!n");int i=0;fscanf(fp,"%c",&ai);/读取第一个字符给a0while(ai+) /读取字符并输出fscanf(fp,"%c",&ai);注释:fscanf函数用于从磁盘文件中读入数据,送到程序中进行处理,其一般表达形式为:fscanf(文件指针,格式字符串,输入参数列表)与fprintf函数类似,fscanf函数调用时同样返回int型数值,其返回值有两种:函数调用成功时:返回时间输入的字符数函数调用失败时:返回EOFprintf("%c",ai-1);i-;int j=0,k=0;for(;j<i;j+)/统计字符个数 '40'是转义字符空格if(aj='40'|aj='n')k+;j=i-k;/i是总共字符的个数, k是空格与换行的个数printf("n此文本中有%d个字符,",j);for(j=0,k=0;j<i;j+)/统计单词的个数 if(aj!='40'&&aj!='n')&&(aj+1='40'|aj+1='n')k+;if(ai-1!='40'&&ai-1!='n') k+;/ai-1是最后一个字符 得判断一下最后一个是不是空格或换行 若不是k就得再加一printf("有%d个单词,",k);for(j=0,k=1;j<i;j+)/统计行数if(aj='n')k+;统计和编辑功能printf("共%d行。",k);do printf("n功能:统计单词或字符个数请输入1,小写变大写请输入2,大写变小写请输入3,替换字符串请输入4,退出请输入5n");scanf("%d",&c);FILE *fp;int s1,s2,x,y,z;char str120="0",str220="0"用switch语句使得运行程序的人可以对功能进行选择。int d200=0;switch(c)case 1:printf("请输入你要统计的单词或字符:");scanf("%s",m);s=strlen(m);k=0;for(j=0;j<i;j+)n=0;while(mn=aj&&n<s) n+,j+;if(n=s) k+,j-;注释:当m与a的字符数组,不仅对应的字符完全一样,而且长度还要一样,这样才可以统计出一个字符,k累加一。printf("%s共有%d个n",m,k);break;case 2:printf("请输入转变后文件的保存路径:");scanf("%s",file);fp=fopen(file,"w");注释: fopen是c语言中文件打开的函数,该函数的声明在头文件stdio.h中,这里“w”是write的缩写,设置对文件“写”的权限。printf("转变后的文本为:0");for(j=0;j<i;j+)if('a'<=aj&&aj<='z')bj=aj-32;else bj=aj;fprintf(fp,"%c",bj);printf("%c",bj);printf("文件保存已完成!0");fclose(fp);break;case 3:printf("请输入转变后文件的保存路径:");scanf("%s",file);fp=fopen(file,"w");printf("转变后的文本为:0");for(j=0;j<i;j+)if('A'<=aj&&aj<='Z')bj=aj+32;else bj=aj;fprintf(fp,"%c",bj);printf("%c",bj);printf("0文件保存已完成!0");fclose(fp);break;case 4:printf("请输入需要被替换的字符串:");scanf("%s",str1);printf("n请输入用来替换的字符串:");scanf("%s",str2);printf("n请输入转变后文件的保存路径:");scanf("%s",file);fp=fopen(file,"w");s1=strlen(str1);s2=strlen(str2);k=0;while(bk)/消除由于case2和case3带来的影响bk+='0'k=0;for(j=0;j<i;j+)n=0;while(str1n=aj&&n<s1) n+,j+;if(n=s1) dk+=j-n,j-;这里的k就是用来统计需要被替换的字符的个数.dk则表示在被替换字母前有多少个字符x=0,y=0,z=0;while(x<k)while(z<dx)by+=az+;n=0;while(n<s2&&z<=i)by+=str2n+;x不断累加,直到文本中所有的被替换字符串的个数.不断进行循环z+=s1;x+;while(z<i)by+=az+;for(x=0;x<y;x+)fprintf(fp,"%c",bx);printf("%c",bx);fclose(fp);break;case 5:break;default:printf("输入错误!");while(c!=5);4.程序运行展示首先在D盘建立c_language的文件夹,并在其中建立a、b、c、d四个txt文件,其中a.txt是指定的文本文件。第一步:读取指定的文本文件,并将信息输出功能一功能二功能三功能四功能五5.设计总结文本编辑器这个c语言课程设计课题,主要是对文本文件进行处理,最主要是将指定的文本文件中读取出来并且将文件中的字符赋到字符数组中,然后对字符进行处理。在编程中遇到的困难主要是如何将指定的文本文件读取出来。其中涉及到文件的打开,读取,结束。在刚开始编程的时候,试过许多的函数。比如说,fread函数,在工程应用中,有时候需要从文件中对数据进行批量的复制或存储,所以要使用数据段处理函数fread和fwrite函数。但是这个函数是事先要知道你所要读取的数据段的大小,所以最终并没有采取这个函数。除了读取函数,还有对字符串的处理。比如说在功能四中,被替换和替换的字符串长度不一样的话,还要对字符的相应位置进行处理。除了这些困难,其他就是如何将这个程序编写的规范,清楚。因为其中运用到许多的循环,选择语句。比如for,while,switch语句,还有语句的嵌套,所以比较复杂。最终通过查询书本,向老师同学请教,最后这些困难都得以解决。6.心得体会及致谢经过这次c语言的编程,使我更加懂得c语言的逻辑性。想要编好一个程序,必须要对c语言中的各个函数了解而且要熟练掌握运用。在编程中要小心严谨,有时候,一个逗号或者分号都会对整个程序的设计产生影响。 自己不懂的知识,要及时查询书本或者向老师同学请教,这样才能及时查漏补缺,完善自己的程序。编程序除了要将规定的功能编出来,还要在这个基础上,将程序编的有条理,简洁,一目了然。这样才能编出比较好的程序来。最后,感谢老师的指导和同学们的帮助。【参考文献】C语言课程设计与项目实践C程序设计7.答辩记录8.教师意见