数据结构课程设计:文本编辑(最后附完整
代码)
一.问题描述---------------------------------------------1 二.设计思路---------------------------------------------1 三.系统实现功能
1.建立单链表-------------------------------------------2 2.显示文章内容---------------------------------------- 3 3.查找文章语句-----------------------------------------3 4.删除文章语句-----------------------------------------5 5.替换文章语句-----------------------------------------7 6.统计文章字数-----------------------------------------10 7.写入文本结束程序--------------------------------------10
四.系统不足及需改进分------------------------------------11 五.文件清单说明------------------------------------------11 六:附录-------------------------------------------------12
一:问题描述
本次我所做的课程设计为:文本编辑,主要内容是对中文文本的显示、查找、删除、替换、统计、写入文本。在程序选择功能后根据提示,输入任意长度中文语句即可对文章进行操作。
二:设计思路
文本编辑,顾名思义就是对一遍文章进行编辑,我所设计的是对中文的编辑。中文有两个字节(汉字、标点),通常情况下通过文件输入流仅仅可以取一个字节或者是以空格为分隔符取单词这仅仅对英文的文章适用,周六周日我从网上搜索相关方法,未找到一条切实可用的对中文字符操作的方法。后因看到一种对string的操作灵光一闪,想到了对中文的操作。
因中文是两个字节,由两部分ASCII码组成,所以可用单链表一个节点存放一个汉字或字符,单链表的数据域是一个长度为二的char数组分别存汉字的两个字节。若用户从键盘输入则将其存入string然后遍历将其每一个字节取到char数组中,这样只需两个字节对比一次使char数组中相邻的两个字节与单链表中每一个节点的两个char对比即可遍历。
我所用的数据结构为单链表,结构中由一个长度为2的char数组和一个指针组成具体结构如下:
typedef struct LNode {
ElemType data[2];//长度为2的char数组,char[0]存汉字前半部分,char[1]存后半部分 struct LNode *next;
}LinkList;
三:系统实现的功能
1.建立单链表
void CLinkList(LinkList *&L) {
}
r->next=NULL;
}
else if(temp==' ') { } else { }
r->next=s; r=s;
fin.get(); s->data[0]='\\n'; s->data[1]='1';
s->data[0]=temp; s->data[1]='1';
LinkList *s,*r; r=L;
r->next=NULL;
char temp; //存放判断变量,同时起到中间变量的作用 ifstream fin(\);//打开文件输入流 while(!fin.eof()) {
s=(LinkList *)malloc(sizeof(LinkList));//一个节点存一个汉字或字符 temp=fin.get(); //从文件取一个字符
if(temp!=' ') //判断是否为空格、回车,若为空格回车则只存一个字符剩下一个用'1'{
s->data[0]=temp; s->data[1]=fin.get();
代替
}
fin.close();
2.显示文章内容
void DisList(LinkList *L)
{ }
LinkList *p=L->next;
while(p!=NULL)//遍历单链表依次输出 { }
if(p->data[0]!=' ')//判断是否为空格决定输入方式
cout<
3.查找文章语句
seek(LinkList *&p,char a[],int m)函数,遍历查找单链表找到参数给定指针最近位置的对应语句并返回逻辑位置(不包括空格和回车)。