简易文本编辑器数据结构课程设计.docx
《简易文本编辑器数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《简易文本编辑器数据结构课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
简易文本编辑器数据结构课程设计
海南大学信息科学技术学院
数据结构课程设计报告
设计题目:
简易文本编辑器
专业班级:
通信三班
姓名:
代亮亮
学号:
20111613310076
指导教师:
吴哲晖
目录
一、需求分析
二、设计要求
三、概要设计
四、详细设计
五、运行结果
六、心得体会
七、参考文献
1.需求分析:
在当今的消息快速发展的年代,利用网络来传递消息已经是消息传播的唯一途径,而对一个文本的修改是我们每天都在做的事,在这广域的消息里快速的提取出对自己有用的部分,因此我设计了一个简易的文本编辑器,能够提供查找功能,替换功能。
2.概要设计:
为了更有效的进行查找功能,该编辑器运用了链式存储,该存储结构的特点是逻辑关系相邻的两个元素在物理位置上并不相邻,并将输入的文本分为一个一个的链块,这样,就能大大加快了查找的元素的速度。
(1)输入并显示文本信息。
(2)在文本中对某些元素进行查找,
(3)对查找的元素替换。
(4)显示替换元素的位置。
(5)显示元素替换后的文本。
(6)退出。
3.详细设计:
3.1程序模块说明
3.1.1程序模块
为了更方便地完成字符串的查找,此程序采用串的块链式存储结构存储方式。
通过主模块调用四个小模块完成文本编辑的各种功能。
用户可在主模块上循环对程序进行操作。
3.1.2模块功能说明
1.主模块:
用户可编辑任一文档,输入要在文本中查找的信息。
初始化一个字符串,并用串的块链式存储结构存储。
2.编辑文本信息:
将用户编辑的文本信息分行输出来,并输出字符串的长度和行数。
3.查找模块:
遍历整个文本,查找字符串在串中的位置,并输出其所在位置,直到遍历完整个文本结束。
4.替换模块:
先查找你要替换的字符所在位置,然后根据用户选择是否替换该字符。
5.退出模块:
退出程序,等待用户下次重行运行该程序。
3.2程序流程图说明
3.2.1主函数流程图
图2.1.主程序流程图
用户可根据此函数输入想要进行的操作来实现其相应的编辑文本信息、查找字符在文本中的所在位置、替换文本中的字符串及查看当前文本的字符数以及行数的信息等一系列功能。
3.2.2显示模块流程图
图2.2显示模块流程图
此模块主要实现用户所编辑的文本信息的行数和字符总个数,以及输出文本的字符信息。
显示出用户所编辑的文本信息,并输出到屏幕上,为满足用户需求,此模块可循环操作。
3.2.3查找模块流程图
图2.3查找流程图
此模块主要是完成字符串的查找以及替换文本中的字符信息等功能。
查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,比较下一个字符,否则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。
查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止,详见流程图2.3。
3.2.4替换模块流程图.
图2.4.替换流程图
查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。
替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,同样也是一直循环到读完整个文本信息为止。
详见流程图2。
4。
3.2.5将文本初始化
图2.5初始化文本信息
将文本信息初始化到用块链式存储的串中
4函数的描述
4.1串的初始化
初始化一个空串,然后将输入的文本信息存储到此串中,因为这是采用的块链式存储,用户可以自定义行的大小即一个节点存储的字符串个数,所申请的总的节点数也就是字符的行数。
4.2查找函数
查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,用for循环比较下一个字符,不同则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且再向后移一个字符,然后再从头开始和和所查找字符穿一一比较。
4.3替换函数
替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,若需替换,则进入for循环完成替换,然后再通过比较查找到下一个需替换的位置,同样也是一直循环到读完整个文本信息为止。
4.4串的块链存储
采用串的块链式存储的优点是用户可根据自已的实际需要来定义每个节点的大小,这样可减少空间浪费,除此之外,链式存储还方便查找。
5程序测试和运行的结果
为方便查阅,所以选一串比较短的字符串为例,以英文字符“ABCDEFGHIJKLMN1234567”为例,来实现下面的所有功能
5.1初始化一个串
5.1.1首先用户可输入用户所需要的文本信息,如“ABCDEFGHIJKLMN1234567”
程序开始运行界面如图4.1.1所示。
5.1.2.初始化“ABCDEFGHIJKLMN1234567”后,结果如下图4.1.2所示,分行输出文本的字符信息以及文本长度和行数。
初始化一字符串
5.2查找与替换字符串
4.2.1.编辑完文本后,用户可自定义查找和替换字符,选择查找和替换选项(即第二个选项),;如下图4.2.1所示。
根据说明输入指令2进行查找
5.2.2输入你要查找的字符串,以回车结束。
如图4.2.2所示。
根据提示,输入你要查找的字符,如“D”
查找字符串
5.2.3输入你需要替换后的的字符,如“L”
5.2.4查找出所查找词在串中的第一个位置,输出该位置并弹出指令用户是否需要替换此位置的词.
5.2.5根据用户选择,如输入Y;则替换掉该位置的词并接着查找下一个所查找字符的所在位置或查找结束。
5.2.6若用户不需要替换该位置的字符,输入“N”程序将跳过该位置替换直接进入下一轮查找。
回到主程序,查找下一个字符,或继续进行下一轮操作。
6.设计心得体会:
在这学期里我们学习了数据结构这门课程,由于这次课程设计没有具体的实验题目要求,大家自由发挥,经过在网上查找资料和自己在本学期的学习情况,我选择设计一个简易的文本编辑器。
通过这次课程设计我认识到了知识的学习不能只局限于课本知识,更使我明白了编码能力和实践能力的重要性,而我们以后的编码将会有更高的要求,将会有更多的设计要求,不能仅仅是从自身的考虑出发,这将大大提高编码的困难程度。
而通过这次课程设计,也让我更加的熟练的掌握了VisualC的环境和语法,熟悉了其结构,提高了自身的分析能力和编码能力。
同时,通过这次课程设计,我也对大一学习的C语言进行了一次复习,再次复习了C语言的编程语法。
在编码与调试过程中,我也遇到了很多的问题,有很多问题也是由于自己的粗心而使调试的时候花费了很多不必要的世界,例如有的地方少了分号,冒号,有的地方忘记了定义,有时候即使没有出现错误但是运行结果是错误的,通过与同学的交流沟通,和在书上查看相关资料,最终解决了这些问题。
总之,通过这次课程设计不仅锻炼了我的实际操作能力,而且培养了严密的思维能力和严谨的态度,本次课程设计让我受益匪浅,而且加深了我对编程的兴趣。
参考文献
1].王昆仑、李红。
《数据结构与算法》。
北京:
中国铁道出版社。
附录(关键部分程序清单)
查找和替换函数
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;}
q=q->next;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->head;
a=b;c=d;
for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b; }}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}生成一个其值等于chars的串T,成功返回1,否则返回0intStrAssign(LString*T,char*chars){inti,j,k,l,m=0;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i)return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数,即行数if(i%CHUNKSIZE>0)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l{q->ch[l]=chars[m];m++;}if(!*chars){(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}} return1;}输出字符串TvoidStrPrint(LStringT){inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
p=p->next;
q=p;
for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b; }}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}生成一个其值等于chars的串T,成功返回1,否则返回0intStrAssign(LString*T,char*chars){inti,j,k,l,m=0;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i)return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数,即行数if(i%CHUNKSIZE>0)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l{q->ch[l]=chars[m];m++;}if(!*chars){(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}} return1;}输出字符串TvoidStrPrint(LStringT){inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
q->ch[c]=chars1[c2];
c2++;c++;
c2=0;c1=0;
StrPrint(*T);
}//替换完毕
c=d;a=b;
if(!
*(q->ch+c+1+m))//串查完/
printf("查找完成,已无匹配字符\n");
break;
else
for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}生成一个其值等于chars的串T,成功返回1,否则返回0intStrAssign(LString*T,char*chars){inti,j,k,l,m=0;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i)return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数,即行数if(i%CHUNKSIZE>0)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l{q->ch[l]=chars[m];m++;}if(!*chars){(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}} return1;}输出字符串TvoidStrPrint(LStringT){inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
p=p->next;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为串的长度
i)
return0;
(*T).curlen=i;
j=i/CHUNKSIZE;//j为块链的结点数,块的个数,即行数
if(i%CHUNKSIZE>0)//不足一个块的,当成一个块即块数加1
j++;
printf("长度是%d\n行数是%d\n",i,j);
for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l{q->ch[l]=chars[m];m++;}if(!*chars){(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}} return1;}输出字符串TvoidStrPrint(LStringT){inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
p=(Chunk*)malloc(sizeof(Chunk));
p)
if(k==0)
(*T).head=q=p;
q->next=p;
for(l=0;l{q->ch[l]=chars[m];m++;}if(!*chars){(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}} return1;}输出字符串TvoidStrPrint(LStringT){inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
q->ch[l]=chars[m];m++;}
*chars)
(*T).tail=q;
q->next=NULL;
for(;l*(q->ch+l)=blank;}} return1;}输出字符串TvoidStrPrint(LStringT){inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
*(q->ch+l)=blank;
return1;
输出字符串T
voidStrPrint(LStringT)
inti=0,j;
Chunk*h;
h=T.head;
while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");} 源代码#include#include#include#include#include#defineCHUNKSIZE4#definen26charblank='#';//全局变量,用于填补空余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;Chunk*p,*q;i=strlen(chars);//i为串的长度if(!i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符return0;(*T).curlen=i;j=i/CHUNKSIZE;//j为块链的结点数,块的个数if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1j++;printf("长度是%d\n行数是%d\n",i,j);for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
if(*(h->ch+j)!
=blank)//不是填补空余的字符
printf("%c",*(h->ch+j));
i++;
printf("\n");
h=h->next;
源代码
#include
#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=i/CHUNKSIZE;//j为块链的结点数,块的个数
if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1
for(k=0;k{p=(Chunk*)malloc(sizeof(Chunk));if(!p)return0;if(k==0)//第一个链块(*T).head=q=p;else{q->next=p;q=p;}for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
if(k==0)//第一个链块
for(l=0;l*(q->ch+l)=*chars++;if(!*chars)//最后一个链块{(*T).tail=q;q->next=NULL;for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
*(q->ch+l)=*chars++;
*chars)//最后一个链块
for(;l*(q->ch+l)=blank;}}return1;}intStrEmpty(LStringS){if(S.curlen)return0;elsereturn1;}voidStrPrint(LStringT)//输出字符串T{inti=0,j;Chunk*h;h=T.head;while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
intStrEmpty(LStringS)
if(S.curlen)
voidStrPrint(LStringT)//输出字符串T
while(i{for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
for(j=0;jif(*(h->ch+j)!=blank)//不是填补空余的字符{printf("%c",*(h->ch+j));i++;}printf("\n");h=h->next;}printf("\n");}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->next;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->head;a=b;c=d;for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
voidchazhao(LString*T,char*chars,char*chars1)///查找和替换函数///
{q=q->next;c=0;}
for(a1=1;a1p=p->next;q=p;for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
for(;c1{if(c==CHUNKSIZE){q=q->next;c=0;}q->ch[c]=chars1[c2];c2++;c++;}c2=0;c1=0;StrPrint(*T);}//替换完毕c=d;a=b;}}if(!*(q->ch+c+1+m))//串查完/{printf("查找完成,已无匹配字符\n");break;}else{p=T->head;for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
for(a1=1;a1{p=p->next;q=p;}c=c+1;m=0;}}}voidmain(){chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";LStringt1;intk,meum=0,L,h;printf("\t=========说明:首先连续输入几个字符初始化串,以回车结束.======\n");printf("\t=====================1:查看串的信息=====================\n\n");printf("\t=====================2:查找与替换=====================\n\n");printf("\t=====================3:退出=====================\n\n");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请输入命令!(参照说明)\n");scanf("%d",&meum);fflush(stdin);switch(meum){case1:{printf("初始化串t1后,\n");StrEmpty(t1);k=StrAssign(&t1,s1);if(k==1){printf("串t1为:\n");StrPrint(t1);}elseprintf("出错\n");//不能生成空串}break;case2:{printf("请输入查找的字符!\n");scanf("%s",&s2);fflush(stdin);printf("请输入替换后的字符!\n");scanf("%s",&s3);fflush(stdin);chazhao(&t1,s2,s3);}break;case3:{exit(0);}break;default:printf("输入错误!!请重新输入!\n");break;}}}
{p=p->next;q=p;}
voidmain()
chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";
LStringt1;
intk,meum=0,L,h;
printf("\t=========说明:
首先连续输入几个字符初始化串,以回车结束.======\n");
printf("\t=====================1:
查看串的信息=====================\n\n");
printf("\t=====================2:
查找与替换=====================\n\n");
printf("\t=====================3:
退出=====================\n\n");
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为:
StrPrint(t1);
printf("出错\n");//不能生成空串
printf("\t请输入命令!
(参照说明)\n");
scanf("%d",&meum);fflush(stdin);
switch(meum)
case1:
printf("初始化串t1后,\n");
}break;
case2:
printf("请输入查找的字符!
scanf("%s",&s2);
printf("请输入替换后的字符!
scanf("%s",&s3);
chazhao(&t1,s2,s3);
case3:
{exit(0);}break;
default:
printf("输入错误!
!
请重新输入!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1