结构数据结构课程设计小型文本编辑器的设计Word文件下载.docx
《结构数据结构课程设计小型文本编辑器的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《结构数据结构课程设计小型文本编辑器的设计Word文件下载.docx(21页珍藏版)》请在冰点文库上搜索。
4.2.511
4.2.612
参考文献13
附录(关键部分程序清单)14
查找和替换函数14
生成一个其值等于chars的串T,成功返回1,否则返回016
输出字符串T18
源代码20
1程序模块说明
1.1程序模块
为了更方便地完成字符串的查找,此程序采用串的块链式保存结构保存方式。
通过主模块调用四个小模块完成文本编辑的各种功能。
用户可在主模块上循环对程序进行操作。
1.2模块功能说明
1.主模块:
用户可编辑任一文档,输入要在文本中查找的信息。
初始化一个字符串,并用串的块链式保存结构保存。
2.编辑文本信息:
将用户编辑的文本信息分行输出来,并输出字符串的长度和行数。
3.查找模块:
遍历整个文本,查找字符串在串中的位置,并输出其所在位置,直到遍历完整个文本结束。
4.替换模块:
先查找你要替换的字符所在位置,然后根据用户选择是否替换该字符。
5.退出模块:
退出程序,等待用户下次重行运行该程序。
2程序流程图说明
2.1主函数流程图
图2.1.主程序流程图
用户可根据此函数输入想要进行的操作来实现其相应的编辑文本信息、查找字符在文本中的所在位置、替换文本中的字符串及查看当前文本的字符数以及行数的信息等一系列功能。
详见图2.1.
2.2显示模块流程图
图2.2显示模块流程图
此模块主要实现用户所编辑的文本信息的行数和字符总个数,以及输出文本的字符信息。
显示出用户所编辑的文本信息,并输出到屏幕上,为满足用户需求,此模块可循环操作。
详见流程图2.2。
2.3查找模块流程图
图2.3查找流程图
此模块主要是完成字符串的查找以及替换文本中的字符信息等功能。
查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,比较下一个字符,否则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。
查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止,详见流程图2.3。
2.4替换模块流程图.
图2.4.替换流程图
查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。
替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,同样也是一直循环到读完整个文本信息为止。
详见流程图2。
4。
2.5将文本初始化
图2.5初始化文本信息
将文本信息初始化到用块链式存储的串中
3函数的描述
3.1串的初始化
初始化一个空串,然后将输入的文本信息存储到此串中,因为这是采用的块链式存储,用户可以自定义行的大小即一个节点存储的字符串个数,所申请的总的节点数也就是字符的行数。
3.2查找函数
查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,用for循环比较下一个字符,不同则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且再向后移一个字符,然后再从头开始和和所查找字符穿一一比较。
3.3替换函数
替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,若需替换,则进入for循环完成替换,然后再通过比较查找到下一个需替换的位置,同样也是一直循环到读完整个文本信息为止。
3.4串的块链存储
采用串的块链式存储的优点是用户可根据自已的实际需要来定义每个节点的大小,这样可减少空间浪费,除此之外,链式存储还方便查找。
×
4程序测试和运行的结果
为方便查阅,所以选一串比较短的字符串为例,以英文字符“ABCDEFGHIJKLMN”为例,来实现下面的所有功能
4.1初始化一个串
,如“ABCDEFGHIJKLMN”
程序开始运行界面如图
截图4.1.1初始化一字符串
,结果如下图,分行输出文本的字符信息以及文本长度和行数。
截图4.1.2初始化一字符串
4.2查找与替换字符串
,用户可自定义查找和替换字符,选择查找和替换选项(即第二个选项),;
如下图
截图
,以回车结束。
如图,输入你要查找的字符,如“L”;
,如“S”;
详见图
,输出该位置并弹出指令用户是否需要替换此位置的词。
如图
,如输入Y;
则替换掉该位置的词并接着查找下一个所查找字符的所在位置或查找结束,如图
,输入“N”程序将跳过该位置替换直接进入下一轮查找。
截图4.2.6不替换字符串
回到主程序,查找下一个字符,或继续进行下一轮操作。
参考文献
[1]高富平,张楚.电子商务法[M].北京:
北京大学出版社,2002
[2]谭浩强著.C程序设计(第三版).北京:
清华大学出版社,2005
[3]数据结构:
C语言版/严蔚敏,吴伟明编著.—北京:
清华大学出版社,2007
附录(关键部分程序清单)
查找和替换函数
voidchazhao(LString*T,char*chars,char*chars1)//所查找字符和替换后的字符
{
Chunk*p,*q;
intm=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;
charu;
p=q=T->
head;
while
(1)
{
if(c==CHUNKSIZE)
{
q=q->
next;
a++;
c=0;
}
for(x=0;
q->
ch[c]==chars[m];
x++)
m++;
c++;
if(x==0)
{
b=a;
d=c-1;
}
if(c==CHUNKSIZE)
q=q->
c=0;
}
if(chars[m]=='
\0'
)//字符查完
printf("
所查字符所在行位置是%d,第%d个位置开始\n"
b,d+1);
printf("
若需替换该字符,输入Y,否则输入N\n"
);
scanf("
%c"
&
u);
fflush(stdin);
if(u!
='
N'
)
{
p=T->
a=b;
c=d;
for(a1=1;
a1<
a;
a1++)
p=p->
q=p;
for(;
c1<
m;
c1++)//替换后的字符chars1
{
if(c==CHUNKSIZE)
{
q=q->
c=0;
}
q->
ch[c]=chars1[c2];
c2++;
}
c2=0;
c1=0;
StrPrint(*T);
}//替换完毕
c=d;
a=b;
if(!
*(q->
ch+c+1+m))//串查完/
printf("
查找完成,已无匹配字符\n"
break;
else
p=T->
for(a1=1;
p=p->
q=p;
c=c+1;
m=0;
}
生成一个其值等于chars的串T,成功返回1,否则返回0
intStrAssign(LString*T,char*chars)
inti,j,k,l,m=0;
i=strlen(chars);
//i为串的长度
if(!
i)
return0;
(*T).curlen=i;
j=i/CHUNKSIZE;
//j为块链的结点数,块的个数,即行数
if(i%CHUNKSIZE>
0)//不足一个块的,当成一个块即块数加1
j++;
长度是%d\n行数是%d\n"
i,j);
for(k=0;
k<
j;
k++)
p=(Chunk*)malloc(sizeof(Chunk));
p)
return0;
if(k==0)
(*T).head=q=p;
q->
next=p;
q=p;
for(l=0;
l<
CHUNKSIZE&
&
*chars;
l++)
ch[l]=chars[m];
m++;
*chars)
(*T).tail=q;
q->
next=NULL;
for(;
CHUNKSIZE;
*(q->
ch+l)=blank;
return1;
输出字符串T
voidStrPrint(LStringT)
inti=0,j;
Chunk*h;
h=T.head;
while(i<
T.curlen)
for(j=0;
j<
j++)
if(*(h->
ch+j)!
=blank)//不是填补空余的字符
printf("
*(h->
ch+j));
i++;
\n"
h=h->
课程设计总结:
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
源代码
#include<
stdio.h>
conio.h>
malloc.h>
stdlib.h>
string.h>
#defineCHUNKSIZE4
#definen26
charblank='
#'
;
//全局变量,用于填补空余
typedefstructChunk
charch[CHUNKSIZE];
structChunk*next;
}Chunk;
typedefstruct
Chunk*head,*tail;
intcurlen;
}LString;
voidInitString(LString*T)//初始化(产生空串)字符串T。
(*T).curlen=0;
(*T).head=NULL;
(*T).tail=NULL;
intStrAssign(LString*T,char*chars)//生成一个其值等于chars的串T,成功返回1,否则返回0
inti,j,k,l;
i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符
//j为块链的结点数,块的个数
if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1
for(k=0;
p=(Chunk*)malloc(sizeof(Chunk));
if(k==0)//第一个链块
*(q->
ch+l)=*chars++;
*chars)//最后一个链块
l++)//用填补空余的字符(blank=‘#’)填满链表
intStrEmpty(LStringS)
if(S.curlen)
else
return1;
voidStrPrint(LStringT)//输出字符串T
voidchazhao(LString*T,char*chars,char*chars1)///查找和替换函数///
{q=q->
{p=p->
voidmain()
chars1[n],s2[n],s3[n];
//char*s3="
22"
*s2="
aa"
LStringt1;
intk,meum=0,L,h;
\t=========说明:
首先连续输入几个字符初始化串,以回车结束.======\n"
\t=====================1:
查看串的信息=====================\n\n"
\t=====================2:
查找与替换=====================\n\n"
\t=====================3:
退出=====================\n\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)
串t1为:
\n"
StrPrint(t1);
出错\n"
//不能生成空串
\t请输入命令!
(参照说明)\n"
scanf("
%d"
meum);
switch(meum)
case1:
StrEmpty(t1);
k=StrAssign(&
if(k==1)
}break;
case2:
请输入查找的字符!
s2);
fflush(stdin);
请输入替换后的字符!
s3);
chazhao(&
t1,s2,s3);
case3:
{exit(0);
}break;
default:
输入错误!
!
请重新输入!
break;
此文档是由网络收集并进行重新排版整理.word可编辑版本!