1、对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能对文章中需要删除的字符或者字符串进行查找,然后对其进行删除。2. 数据结构选择本程序是对输入的文字进行操作,故使用的数据结构为单链表操作。根据第一部分的问题分析有该链表操作有3部分:另有全局变量 *head,作为文章的头指针。创建结构体:typedef struct list char data80; /记录一行字符int length; /记录一行字符长度 struct _list *next;
2、 /后继指针struct _list *pre; /前趋指针int row; /记录整篇文章的行数LinkList;在文章内容创建部分中使用线性表的链式存储,并使用全局变量对文本的各种信息进行存储;文章的读取、内容统计、删除、查找都采用链表操作完成。3.流程图(1)主框架:(2)文章内容统计子菜单(3) 文章内容处理子菜单(4)使用函数列表及关系图函数名:1、CreatWord() 文本输入函数,对文本的内容进行输入2、PrintWord() 当前文本内容输出函数,将当前存储在链表中的文本内容输出5、CountWord() 文章内容统计函数,对存储在链表中文本内容进行统计6、SearchWor
3、d() 文章内容查找函数7、DeleteWord() 文章内容删除函数8、Bmenu() 文本内容处理菜单函数9、AboutWord() 显示作者信息的函数10、menu() 主菜单函数11、main() 主函数关系图:二、详细设计(实验过程)1、数据结构定义 char data80; /*记录一行字符*/ int length; /*记录一行字符长度*/ struct list *next; /*后继指针*/ struct list *pre; /*前趋指针*/ int row; /*记录整篇文章的行数*/2、全局变量定义LinkList *head; /*定义全局变量*head,文章首行头
4、指针*/int NUM,C,N; /*定义全局变量,Num用来记录行号,C用来记录子串在主串中出现的总次数*/3、函数说明(1)CreatWord() 文本创建函数LinkList *CreatWord() LinkList *temp; char ch; int i,j; head-next=(LinkList *)malloc(sizeof(LinkList); /pre=NULL; temp=head-next; temp-length=0; for(i=0;i80;i+)datai=0; printf(tt*n);tt* 创建文本 *ntt请输入文章(输入#号结束):nn for(j=
5、0;jdatai=ch;length+; if(ch=#) NUM=j; break; if(ch=length=i;next=NULL; break; temp-next=(LinkList *)malloc(sizeof(LinkList) ;next-pre=temp; temp=temp- row=NUM+1; system(cls return (temp);说明:a、 定义LinkList指针变量*temp:b、 定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;c、 申请动态存储空间:head-d、 首行头指针的前驱指针为空: 首行指针: 首行指针的前驱指针也为空:
6、 定义没输入字符时文章长度为0: 初始化为字符串结束标志,防止出现乱码:e、 利用循环进行文本输入LINK_INIT_SIZE;j+)/ 控制一页 for(i=0;i+) /控制一行 ch=getchar(); /接收输入字符 /给temp指向的行赋值 /行中字符长度加1 NUM=j; break; /文章结束时,Num来记录整个文章的行数 在字符输入的过程中,如果在单行输入的字符超过了80个字符,则需要以下操作 :输入字符数大于80,重新分配空间建立下一行:temp-给temp的前驱指针赋值:temp指向当前行: temp=temp-将下一行初始化为字符串结束标志,防止出现乱码:for(i=
7、0; temp-记录整个文章的行数:返回指向最后一行指针:return temp;文本输入部分到此结束。(2)PrintWord() 文章显示函数void PrintWord() LinkList *p; p=head-ntt* 文本显示 *nn当前文章的内容是:=NUM&p!=NULL;(idatai)!= printf(%c,p-datai); p=p-a、 定义文本行数变量j,每行字符数i:int i,j;b、 定义指针变量:LinkList *p;c、 将指针p指向链表表头:p=head-d、 利用循环输出链表中信息: =for(i=0; =printf(文本显示部分到此结束。(3)C
8、ountWord() 文章内容统计函数void CountWord() int i,j,t; int WORD=0,word=0,space=0,num=0,sum=0;=NUM;(temp- ch=temp-datai; if(chA)&(chaz word+;09) num+; else if(ch= space+; sum=WORD+word+num; while(1) printf(tt* 文章内容统计子菜单 *ntt* 文章中 字母 的个数: %d n,WORD+word);tt* 文章中 数字 的个数:,num);tt* 文章中 空格 的个数:,space);tt* 文章中 所有字
9、 的个数:,sum);tt* 1、退出返回主菜单 *ntt* 2、直接退出本系统 *ntt请选择: scanf(%d,&t); if(t=1)system( break; else if(t=2)exit(0); else tt 对不起,无此功能!请回车重新选择!.ntt fflush(stdin); getchar();a、 定义指针变量temp:LinkList *temp;b、 定义记录文本行数变量j,每行字符数i;c、 定义记录文本大写字母数、小写字母数、空格数、数字数和总字数的变量:d、 将指针temp指向链表表头:temp=head-利用循环对链表中信息进行匹配判断,将大写字母数、
10、小写字母数、空格数、数字数和总字数统计出来:for(j=0;e、 本程序对统计项目设计了菜单。菜单的编写使用 while语句进行循环操作。文本内容统计部分到此结束。(4)SearchWord() 文章内容查找函数void SearchWord(char *str1,LinkList* temp) char Data20 ; int i,j,k=0,sum=0; int l=1; strcpy(Data,str1);j+) if(temp-dataj)=Datak) k+; else if(Datak! j=j-k; k=0; if(Datak=) sum+; j=j-k+1;ttt第%d次出现
11、在第%d行第%d列n,l,i+1,j); l+; k=0; continue; nttt字符串总共出现次数为:%dnn C=sum; N=i*80+j;a、 定义一个数组,用来记录需要查找的字符内容:char Data20;b、 定义定义文本行数变量j,每行字符数i,记录字符出现的次数变量:int i,j,m=0.,sum=0;c、 对形参中定义的指针变量进行操作,使其指向链表表头:d、 使用拷贝函数,将形参中str1的值赋给Data:strcpy(Data,str1);e、 利用循环进行查找操作:i+) /*利用循环进行查找操作*/ for(j=0;/*将输入的查找字符与链表中信息比较, 找
12、到第一个相同的字符*/ j=j-k;/*从主串第j-k个位置重新查找*/ k=0; if(Datak= sum+;/*此字符出现的次数加1*/ j=j-k+1;/*j记录下该字符串出现的位置*/ printf( l+; continue;/*指向下一行*/ 文本内容查找部分到此结束。(5)DeleteWord() 文章内容删除函数void DeleteWord(char *str2) char Data20; LinkList *temp,*term; int i,j,a,k,m,y,num; strcpy(Data,str2); for(y=0;y for(j=0; if(temp- els
13、e if(Datak!) j=j-k;k=0; if(Datak= num=j; break; if(num80) break; for(; for(; if(j+1data80-k+num=temp-dataj+1; else temp-dataj-k+1=temp- j=0;a、定义一个数组用来存储需要删除的字符或者字符串:b、定义指针变量:LinkList *temp,*term;c、定义整形变量用来控制行数、字符数:int i,j,k,m,y,num;d、使用拷贝函数讲形参中需要删除的字符或字符串赋值给已定义的数组:strcpy(Data,str2);f、 使用循环进行删除操作:for
14、(y=0;i+)/*使用循环进行删除操作*/ /*首先是使用循环查找到需要删除字符或者字符串的字符数以及字符或者字符串的位置,以便于删除*/*删除的字符串不在最后一行, 将下一行的字符(由temp指向)前移到前行*/*当要删除的字符串在最后一行 只要将最后一行的字符前移*/ /*在使用循环,从查找到的字符或者字符串开始进行删除, 在一行删除完毕之后,转至下一行进行删除*/文本内容删除部分到此完成。(6)Bmenu() 文章内容处理菜单函数 void Bmenu(LinkList *temp) char str120; char str220; int t; do /*利用do while 循环来控制主菜单显示*/ ntt*ntt* 文章内容处理子菜单 *ntt* 1、查找文章中的字符或者字符串 *ntt* 2、删除文章中的字符或者字符串 *ntt* 3、显示当前文章内容 *ntt* 4、返回主菜单 *ntt* 5、直接退出系统 *ntt 请选择: if(t5)|(t1) else switch(t) case 1: system( pr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1