logo资料库

数据结构课设文章编辑实验报告.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
3.2.2统计文本算法及实现··············7
3.2.3统计数字、字母和空格个数算法及实现······7
3.2.4文本输出算法及实现··············8
(2)统计文本算法及实现
统计文本时,只需要遍历整个链表,计数加一,具体代码如下:
//统计文章的总字数
int Count_All_Word(LINE * &head)
{ LINE *p=head; //保存链表的首地址
int count=0; //总字母数
do
{count+=strlen(p->data);}
while((p=p->next)!=NULL);
return count;
}
(3)统计数字、字母和空格个数算法及实现
在统计数字、字母和空格个数时,我采用的是遍历整个链表,如果遍历链表的元素等于数字、字母或空格的ASS
//统计空格数
int Count_Space(LINE * &head)
{ LINE *p=head;
int asc_space=32; //空格的ASCIC 码值
int count=0;
do
{
int Len=strlen(p->data);
for(int i=0;i
if(p->data[i]==asc_space)count++;
}
while((p=p->next)!=NULL);
return count;
}
//统计数字数
int Count_Num(LINE * &head){
LINE *p=head;
int count=0;
do
{
int Len=strlen(p->data);
for(int i=0;i
if(p->data[i]>=48 && p->data[i]<=57)count+
}
while((p=p->next)!=NULL);
return count;
}
// 统计字母数
int Count_ZM(LINE * &head)
{ int count=Count_All_Word(head);
int space_count=Count_Space(head);
int num_count=Count_Num(head);
return count-space_count-num_count;
}
(4)文本输出算法及实现
文章输出时,也是采用遍历链表的方法,实现代码如下:
//向屏幕输出 文章
void OutPutTxt(LINE * &head){
LINE *p=head;
do
{ cout<data<
} while((p=p->next)!=NULL);
}
华 北 科 技 学 院 课程设计说明书 班级: 设计题目: 设计时间: 指导教师: 网络 B093 姓名: 文章编辑 2011-2-28 至 2011-3-11 范玉涛 评 语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:__ __评阅教师:__ ___
目录 一、设计题目与要求·································3 二、概要设计·······································3 三、算法设计········································4 3.1 算法············································4 3.2 详细算法及实现··································6 3.2.1 输入文本算法及实现···························6 3.2.2 统计文本算法及实现··············7 3.2.3 统计数字、字母和空格个数算法及实现······7 3.2.4 文本输出算法及实现··············8 3.2.5 字符统计、删除算法及实现·····················9 四、运行结果和调试分析····························11 五、总结体会······································14
一、设计题目与要求 设计题目:文章编辑(限 1 人完成) 功能:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过 80 个字符,共 N 行; 要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一子串,并将后面的字符前移。 输出形式: (1)分行输出用户输入的各行字符; (2)分 4 行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章; 二、概要设计 如何存储输入的文本,这是本次课程设计中最关键的地方,结合数据结构学 到的知识,我将使用线性表存储文本,并将程序分为新建文本、浏览文本、文本 统计、字符删除这几个主要的模块,运用模块化方法将会有助于课程设计时算法 的设计。每个模块的功能如下: 新建文本:输入一段文本,可以是字母、空格和数字; 浏览文本:既能浏览输入的文本,也能浏览删除字符后的文本; 文本统计:统计输入文本或删除字符后的字母、空格和数字的个数; 字符统计:统计指定字符的个数; 字符删除:删除输入的字符。
三、算法设计 3.1 算法 (1)我将文章编辑程序分为新建文本、浏览文本、文本统计、字符统计、字 符删除,这几个主要的模块。具体的流程图如下: 开始 主函数 新建文本 浏览文本 文本统计 字符统计 字符删除 图 1 算法流程图
(2)主要函数:int Find_Word(LINE * &head,char *sch) /*统计 sch 在文章中 出现的次数*/ i++ N N 开始 count=0;h=0;len1=0; len2=strlen(sch); p->data[i]==str[0] Y k=0;j=0; p->data[i+j]==str[j] N Y k++;j++; k=len2 Y count++; i=i+k-1; 结束 图 2 求在一行中 sch 出现的次数的流程图: ①查找第一个字符,如果有第一个字符即 p->data[i]==sch[0],设计数器 k=0 ② 查 找 这 个 字 符 后 面 的 字 符 与 要 查 找 的 字 符 串 是 否 匹 配 , 即 p->data[i+j]==sch[j],如果匹配 k++ ③重复第二步,如果 k=len2,则查找到,count++;如果没查找到,重新进行第 一步
3.2 详细算法及实现 (1)输入文本算法及实现 首先需要初始化、定义一个空串,用来存储输入的字符串,代码如下: typedef struct line { char *data; struct line *next; }LINE; 然后就需要将输入的字符串存入线性链表中,并以#结束。主要代码如下:: //新建文本 void CreateTXT(LINE * &head) { …… LINE *p=new LINE; head=p; char tmp[80]; while(1) { gets(tmp); if(tmp[0]==35)break; p=p->next=new LINE; p->data=new char[strlen(tmp)+1]; strcpy(p->data,tmp); if(tmp[strlen(tmp)-1]==35){ p->data[strlen(tmp)-1]='\0'; break; } } p->next=NULL; head=head->next; }
(2)统计文本算法及实现 统计文本时,只需要遍历整个链表,计数加一,具体代码如下: //统计文章的总字数 int Count_All_Word(LINE * &head) { //总字母数 LINE *p=head; //保存链表的首地址 int count=0; do {count+=strlen(p->data);} while((p=p->next)!=NULL); return count; } (3)统计数字、字母和空格个数算法及实现 在统计数字、字母和空格个数时,我采用的是遍历整个链表,如果遍历链表 的元素等于数字、字母或空格的 ASSIC 码值,则计数加一,统计字母个数时可以 有总数减去字母和空格数,简化了算法复杂度,代码实现如下: //统计空格数 int Count_Space(LINE * &head) { LINE *p=head; int asc_space=32; //空格的 ASCIC 码值 int count=0; do { int Len=strlen(p->data); for(int i=0;idata[i]==asc_space)count++; } while((p=p->next)!=NULL); return count; }
//统计数字数 int Count_Num(LINE * &head){ LINE *p=head; int count=0; do { int Len=strlen(p->data); for(int i=0;idata[i]>=48 && p->data[i]<=57)count++; } while((p=p->next)!=NULL); return count; } // 统计字母数 int Count_ZM(LINE * &head) { int count=Count_All_Word(head); int space_count=Count_Space(head); int num_count=Count_Num(head); return count-space_count-num_count; } (4)文本输出算法及实现 文章输出时,也是采用遍历链表的方法,实现代码如下: //向屏幕输出 文章 void OutPutTxt(LINE * &head){ LINE *p=head; do { } } cout<data<next)!=NULL);
分享到:
收藏