简单行编辑器 数据结构 课程设计汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国矿业大学徐海学院计算机系《软件认知实践》报告
姓名:学号:
专业:
设计题目:简单行编辑器
指导教师:
2012年12月25
目录
第1章题目概述 (1)
第1.1节题目要求 (1)
第1.2节主要难点 (2)
第2章系统流程图 (3)
第3章数据结构和算法 (4)
第4章核心代码分析 (6)
第5章复杂度分析 (10)
第6章总结 (11)
参考文献 (13)
第1章题目概述
在这次课程设计中我选的题目是文本编辑,文本编辑几乎是每个使用电脑
的人都会遇到的问题,特别是网络小说作家们。在文本的编辑中,我们会时常
遇到文本信息的统计问题、小型子串的查找问题、子串的查找和删除问题等。
如果靠人自己去观察和执行相关操作的话,不仅累人,而且很容易出错。而使
用计算机程序去实现的话,则会省力不少,而且相对来说非常精确。本程序使
用了较快速的查找算法,可以大大提高检索的效率,相信这可一极大的方便用
户用电脑编辑文本文件。
第1.1节题目要求
文章编辑
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;
要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标
点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
(3)输出删除某一字符串后的文章;
实现功能
(1)文章内容的输入:包括字母、标点符号、数字等;
(2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符
号、空格以及文章所有字数的个数的统计;
(3)文章内容的处理:包括对文章内容的查找、删除以,其中在查找的过程中统计出该字符或字符串在文章中出现的次数;
第1.2节主要难点
本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能对文章中需要删除的字符或者字符串进行查找,然后对其进行删除。文本编辑的基本内容为查看文本文件内容,统计内容基本信息,查找子串是否存在及其出现次数,查找并删除所有的相关子串并重新输出文本内容等等。
第2章系统流程图
第3章数据结构和算法
1、定义结构体 struct line,文本行采用顺序存储,行与行之间采用链式存储.
2、主要函数:
int FindString(LINE * &head,char *str) /*统计str在文章中出现的次数*/求在一行中Str出现的次数的流程图:
①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0
②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++
③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步。
void delstringword(char *s,char *str) /*删除字符串*s 中的字符串*str*/
实现思想:
①.从字符串s 中寻找str 第一次出现的位置 *p=strstr(s,str);
②.len=strlen(s);i=len-strlen(p)即前i 项恰好不含要删除的字符串,将前i 项复制到tmp 中
③.j=i+strlen(str) 即要删除的字符串在i+1和j 之间,将j 之后的字符串复制到tmp 中
④.将tmp 赋给串s ,返回s
输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入 ^E ,则退出输入。输出时文章时,如果tmp[strlen(tmp)-1]==5即发现表示结束的字符^E ,用p->data[strlen(tmp)-1]='\0'除去最后一个控制符 ^E 。
s
tmp[count++]=s[m];
tmp[count++]=s[n];
tmp
第4章核心代码分析
1.
typedef struct line
{
char *data;
struct line *next;
}LINE; /*创建一链表,同时向里面输入文本数据*/
2.
/*统计字母数*/
int CountLetter(LINE * &head)
{
LINE *p=head;
int count=0;
do
{
int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/
for(int i=0;i if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->d ata[i]<='Z')) /*计算字母数*/ count++; } while((p=p->next)!=NULL); /*遍历链表*/ return count; /*返回文章的字母总数*/ } /*统计数字数*/ int CountNumber(LINE * &head) { LINE *p=head; int count=0; do { int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/ for(int i=0;i if(p->data[i]>=48 && p->data[i]<=57)count++; /*计算数字数,ASCII码*/ } while((p=p->next)!=NULL); /*遍历链表*/ return count; }