1、沈阳航空航天大学课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:小型文本编辑器设计院(系):计算机学院专 业: 班 级:学 号:姓 名:指导老师:目 录沈阳航空航天大学II1 程序模块说明31.1 程序模块31.2 模块功效说明32 程序步骤图说明42.1 主函数步骤图42.2 显示模块步骤图52.3 查找模块步骤图62.4 替换模块步骤图.72.5 将文本初始化83 函数描述93.1 串初始化93.2 查找函数93.3 替换函数93.4 串块链存放94 程序测试和运行结果104.1 初始化一个串104.1.1104.1.2104.2 查找和替换字符串104.2.1104.2
2、.2114.2.3114.2.4114.2.5114.2.612参考文件13附 录(关键部分程序清单)14查找和替换函数14生成一个其值等于chars串T,成功返回1,不然返回016输出字符串T18源代码201 程序模块说明1.1 程序模块为了更方便地完成字符串查找,此程序采取串块链式存放结构存放方法。经过主模块调用四个小模块完成文本编辑多种功效。用户可在主模块上循环对程序进行操作。主模块查找模块替换模块编辑文本信息退出模块1.2 模块功效说明1.主模块:用户可编辑任一文档,输入要在文本中查找信息。初始化一个字符串,并用串块链式存放结构存放。2. 编辑文本信息:将用户编辑文本信息分行输出来,并
3、输出字符串长度和行数。3.查找模块:遍历整个文本,查找字符串在串中位置,并输出其所在位置,直到遍历完整个文本结束。4.替换模块:先查找你要替换字符所在位置,然后依据用户选择是否替换该字符。5.退出模块:退出程序,等候用户下次重行运行该程序。2 程序步骤图说明2.1 主函数步骤图 图2.1.主程序步骤图用户可依据此函数输入想要进行操作来实现其对应编辑文本信息、查找字符在文本中所在位置、替换文本中字符串及查看目前文本字符数和行数信息等一系列功效。详见图2.1.2.2 显示模块步骤图图2.2 显示模块步骤图此模块关键实现用户所编辑文本信息行数和字符总个数,和输出文本字符信息。显示出用户所编辑文本信息
4、,并输出到屏幕上,为满足用户需求,此模块可循环操作。详见步骤图2.2。2.3 查找模块步骤图 图2.3 查找步骤图此模块关键是完成字符串查找和替换文本中字符信息等功效。查找字符串关键是经过将所查找字符串和主串开始从第一个字符开始比较,假如相同,比较下一个字符,不然将指向目前字符串中字符指针向前移动已比较字符个数个单位,而且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止,详见步骤图2.3。2.4 替换模块步骤图. 图2.4. 替换步骤图此模块关键是完成字符串查找和替换文本中字符信息等功效。查找字符
5、串关键是经过将所查找字符串和主串开始从第一个字符开始比较,假如相同,比较下一个字符,不然将指向目前字符串中字符指针向前移动已比较字符个数个单位,而且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。替换功效是在查找基础上进行,即也就是先查找到要替换词位置,然后依据用户选择在此位置是否替换,一样也是一直循环到读完整个文本信息为止。详见步骤图2。4。2.5 将文本初始化 图2.5 初始化文本信息将文本信息初始化到用块链式存放串中3 函数描述3.1 串初始化初始化一个空串,然后将输入文本信息存放到此串中
6、,因为这是采取块链式存放,用户能够自定义行大小即一个节点存放字符串个数,所申请总节点数也就是字符行数。3.2 查找函数查找字符串关键是经过将所查找字符串和主串开始从第一个字符开始比较,假如相同,用for循环比较下一个字符,不一样则将指向目前字符串中字符指针向前移动已比较字符个数个单位,而且再向后移一个字符,然后再从头开始和和所查找字符穿一一比较。查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。3.3 替换函数替换功效是在查找基础上进行,即也就是先查找到要替换词位置,然后依据用户选择在此位置是否替换,若需替换,则进入for循环完成替换,然后再经过比较查找
7、到下一个需替换位置,一样也是一直循环到读完整个文本信息为止。3.4 串块链存放采取串块链式存放优点是用户可依据自已实际需要来定义每个节点大小,这么可降低空间浪费,除此之外,链式存放还方便查找。4 程序测试和运行结果为方便查阅,所以选一串比较短字符串为例,以英文字符“ABCDEFGHIJKLMN”为例,来实现下面全部功效4.1 初始化一个串4.1.1首先用户可输入用户所需要文本信息,如“ABCDEFGHIJKLMN”程序开始运行界面图4.1.1所表示。 截图4.1.1 初始化一字符串 4.1.2初始化“ABCDEFGHIJKLMN”后,结果以下图4.1.2所表示,分行输出文本字符信息和文本长度和
8、行数。 截图4.1.2 初始化一字符串4.2 查找和替换字符串4.2.1.编辑完文本后,用户可自定义查找和替换字符,选择查找和替换选项(即第二个选项),;以下图4.2.1所表示。根听说明输入指令2进行查找 截图4.2.1查找字符串4.2.2输入你要查找字符串,以回车结束。图4.2.2所表示。依据提醒,输入你要查找字符,如“L”; 截图4.2.2查找字符串4.2.3输入你需要替换后字符,如“S”;详见图4.2.3所表示。 截图4.2.3查找字符串4.2.4查找出所查找词在串中第一个位置,输出该位置并弹出指令用户是否需要替换此位置词。图4.2.4所表示。 截图4.2.4替换字符串4.2.5依据用户
9、选择,如输入Y;则替换掉该位置词并接着查找下一个所查找字符所在位置或查找结束,图4.2.5所表示。 截图4.2.5替换字符串4.2.6若用户不需要替换该位置字符,输入“N”程序将跳过该位置替换直接进入下一轮查找。图4.2.6所表示。 截图4.2.6 不替换字符串回到主程序,查找下一个字符,或继续进行下一轮操作。参考文件1 高富平,张楚 . 电子商务法M. 北京:北京大学出版社,2谭浩强著. C程序设计( 第三版). 北京: 清华大学出版社,3数据结构: C语言版 /严蔚敏,吴伟明编著.北京:清华大学出版社,附 录(关键部分程序清单)查找和替换函数void chazhao(LString *T,
10、char *chars,char *chars1)/所查找字符和替换后字符Chunk *p,*q;int m=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;char u;p=q=T-head;while(1)if(c=CHUNKSIZE)q=q-next;a+;c=0;for(x=0;q-chc=charsm;x+)m+;c+;if(x=0)b=a;d=c-1;if(c=CHUNKSIZE)q=q-next;c=0;if(charsm=0)/字符查完printf(所查字符所在行位置是%d,第%d个位置开始n,b,d+1); printf(若需替换该字符,输入Y,不然
11、输入Nn); scanf(%c,&u);fflush(stdin); if(u!=N)p=T-head; a=b;c=d; for(a1=1;a1next;q=p; for(;c1next; c=0; q-chc=chars1c2;c2+;c+;c2=0;c1=0; StrPrint(*T);/替换完成 c=d;a=b;if(!*(q-ch+c+1+m)/串查完/ printf(查找完成,已无匹配字符n);break;elsep=T-head;for(a1=1;a1next;q=p;c=c+1;m=0;生成一个其值等于chars串T,成功返回1,不然返回0 int StrAssign(LStr
12、ing *T,char *chars)int i,j,k,l,m=0;Chunk *p,*q;i=strlen(chars); / i为串长度 if(!i) return 0;(*T).curlen=i;j=i/CHUNKSIZE;/ j为块链结点数,块个数 ,即行数if(i%CHUNKSIZE0)/不足一个块,当成一个块即块数加1j+;printf(长度是%dn行数是%dn,i,j);for(k=0;knext=p; q=p; for(l=0;lchl=charsm;m+; if(!*chars) (*T).tail=q;q-next=NULL;for(;lch+l)=blank;retur
13、n 1;输出字符串Tvoid StrPrint(LString T)int i=0,j;Chunk *h;h=T.head;while(iT.curlen)for(j=0;jch+j)!=blank) / 不是填补空余字符 printf(%c,*(h-ch+j);i+;printf(n);h=h-next;printf(n);课程设计总结:指导老师评语:指导老师(签字): 年 月 日课程设计成绩源代码#include #include #include #include #include #define CHUNKSIZE 4 #define n 26char blank = #;/ 全局变量
14、,用于填补空余 typedef struct Chunkchar chCHUNKSIZE;struct Chunk *next;Chunk;typedef structChunk *head,*tail; int curlen;LString;void InitString(LString *T)/ 初始化(产生空串)字符串T。(*T).curlen=0;(*T).head=NULL;(*T).tail=NULL;int StrAssign(LString *T,char *chars)/ 生成一个其值等于chars串T, 成功返回1,不然返回0 int i,j,k,l;Chunk *p,*q
15、;i=strlen(chars); / i为串长度 if(!i|strchr(chars,blank) / 串长为0或chars中包含填补空余字符 return 0;(*T).curlen=i;j=i/CHUNKSIZE;/ j为块链结点数,块个数 if(i%CHUNKSIZE)/不足一个块,当成一个块即块数加1j+;printf(长度是%dn行数是%dn,i,j);for(k=0;knext=p;q=p;for(l=0;lch+l)=*chars+;if(!*chars) / 最终一个链块 (*T).tail=q;q-next=NULL;for(;lch+l)=blank;return 1;
16、int StrEmpty(LString S)if(S.curlen) return 0;elsereturn 1;void StrPrint(LString T)/ 输出字符串Tint i=0,j;Chunk *h;h=T.head;while(iT.curlen)for(j=0;jch+j)!=blank) / 不是填补空余字符 printf(%c,*(h-ch+j);i+;printf(n);h=h-next;printf(n);void chazhao(LString *T,char *chars,char *chars1)/查找和替换函数/Chunk *p,*q;int m=0,c=
17、0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;char u;p=q=T-head;while(1)if(c=CHUNKSIZE)q=q-next;a+;c=0;for(x=0;q-chc=charsm;x+)m+;c+;if(x=0)b=a;d=c-1;if(c=CHUNKSIZE)q=q-next;c=0;if(charsm=0)/字符查完printf(所查字符所在行位置是%d,第%d个位置开始n,b,d+1); printf(若需替换该字符,输入Y,不然输入Nn); scanf(%c,&u);fflush(stdin); if(u!=N)p=T-head; a=b;c=
18、d; for(a1=1;a1next;q=p; for(;c1next; c=0; q-chc=chars1c2;c2+;c+;c2=0;c1=0; StrPrint(*T);/替换完成 c=d;a=b;if(!*(q-ch+c+1+m)/串查完/ printf(查找完成,已无匹配字符n);break;elsep=T-head;for(a1=1;a1next;q=p;c=c+1;m=0;void main()char s1n,s2n,s3n;/char *s3=22,*s2=aa;LString t1;int k,meum=0,L,h;printf(t=说明:首先连续输入多个字符初始化串,以回
19、车结束.= =n); printf(t=1:查看串信息=nn); printf(t=2:查找和替换=nn); printf(t=3:退 出=nn); printf(请输入文本信息!n); scanf(%s,&s1);fflush(stdin);L=strlen(s1);h=L/CHUNKSIZE;h+;InitString(&t1);printf(初始化串t1后, n);k=StrAssign(&t1,s1);StrEmpty(t1);if(k=1) printf(串t1为:n ); StrPrint(t1); elseprintf(犯错n); / 不能生成空串while(1)printf(t
20、请输入命令!(参考说明)n);scanf(%d,&meum);fflush(stdin); switch(meum) case 1:printf(初始化串t1后, n); StrEmpty(t1);k=StrAssign(&t1,s1);if(k=1) printf(串t1为:n ); StrPrint(t1); else printf(犯错n); / 不能生成空串break;case 2:printf(请输入查找字符!n); scanf(%s,&s2); fflush(stdin);printf(请输入替换后字符!n); scanf(%s,&s3); fflush(stdin);chazhao(&t1,s2,s3);break;case 3:exit(0);break;default: printf(输入错误!请重新输入!n); break;