庞贝贝-1104040216-课设报告3-文章编辑.doc

上传人:b****2 文档编号:854765 上传时间:2022-10-13 格式:DOC 页数:15 大小:208.50KB
下载 相关 举报
庞贝贝-1104040216-课设报告3-文章编辑.doc_第1页
第1页 / 共15页
庞贝贝-1104040216-课设报告3-文章编辑.doc_第2页
第2页 / 共15页
庞贝贝-1104040216-课设报告3-文章编辑.doc_第3页
第3页 / 共15页
庞贝贝-1104040216-课设报告3-文章编辑.doc_第4页
第4页 / 共15页
庞贝贝-1104040216-课设报告3-文章编辑.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

庞贝贝-1104040216-课设报告3-文章编辑.doc

《庞贝贝-1104040216-课设报告3-文章编辑.doc》由会员分享,可在线阅读,更多相关《庞贝贝-1104040216-课设报告3-文章编辑.doc(15页珍藏版)》请在冰豆网上搜索。

庞贝贝-1104040216-课设报告3-文章编辑.doc

试验报告三

课题名称

文章编辑

班级:

信管112

姓名:

庞贝贝

学号:

1104040216

日期:

2013/7/12

一、需求分析

1、功能

(1)输入一页文字,程序可以统计出文字、数字、空格的个数。

(2)静态存储一页文章,每行最多不超过80个字符,共N行;

要求:

1)分别统计出其中英文字母数和空格数及整篇文章总字数;

2)统计某一字符串在文章中出现的次数,并输出该次数;

3)删除某一子串,并将后面的字符前移。

2、存储结构

存储结构使用线性表,分别用几个子函数实现相应的功能;

3、规定

输入数据的形式和范围:

可以输入大写、小写的英文字母、任何数字及标点符号。

4、输出形式

输出形式:

(1)分行输出用户输入的各行字符;

(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"

(3)输出删除某一字符串后的文章;

二、概要设计

1、为了实现程序,需要使用线性表、串复制、求串长

typedefstructLNode

{

ElemType*elem

Intlength

Intlistsize;

}LNode,*linklist;

StrCopy(&T,s)

初始条件:

串S存在

操作结果:

由串复制得串T.

Strlength(S)

初始条件:

串S存在。

操作结果:

返回S的元素个数,称为串的长度。

2、本程序分四个模块

1)输入输出模块

输入模块的设计思想:

每页设立一个头结点head,每行设立一个行结点p,p可以指向后一行(包含next指针),而且每一个行结点还要有一定存储空间,用于存放该行的字符串,这里又有三种方式,一种是用大小为80的字符数组存放,一种是采用动态存储方式,根据字符串的大小分配数组的大小,还有一种是线性表形式,为每个单词分配一个结点,以空格键作为标志,这样便于查找单词和删除单词,但有一点就是空格数不好统计,输入的时候需要连续为每个单词分配存储空间。

经过综合考虑,本算法决定采用第二种动态分配数组大小的方案。

同时。

为了便于用户输出某行,要为每个结点设置一个行号。

设计方案用图解表示为:

由于c++语言的输入标志为cin,而cin不识别空格键,会自动跳过空格键,继续输入别的字符,不能满足文章编辑器的功能需求,故本程序采用c语言的输入语言get(),get语句有一个特点就是会以回车键作为字符串输入结束的标志,本程序将利用这个特点作为行结束的标志。

而以#作为一页文章结束的标志。

linklistCreateTXT()

{

for(标志)

{gets(字符串);\\gets函数以回车键结束,却不输入回车键

申请字符串大小的数组空间;

拷贝字符串给申请到的数组空间;

}

}

输出模块主要借助指针输出。

voidOutPutTxt(linklisthead)

{

while(行指针不为空)

{

for()

输出每行字符串;

}

}

2)统计模块

统计模块分五大模块,分别是:

"全部字母数"、"数字个数"、"空格个数"、"文章总字数"、"某一字符串出现的次数"。

intCount_Space(linklisthead)//统计空格数

{

intcount=0;

遍历链表;

if(字符==’\0’)

count++;

returncount;

}

intCount_ZM(linklisthead)//统计字母数

{

intcount=0;

遍历链表;

if(('a'<=字符<='z')||'A'<=字符<='Z'))

count++;

returncount;

}

intCount_All_Word(linklisthead)//统计文章的总字数

{

intcount=0;

遍历链表;

count=count+每行的字符长度;

returncount;

}

intCount_Num(linklisthead)//统计数字数

{

intcount;

遍历链表;

if(’0’<=字符<=’9’)

count++;

}

3)查找模块

intFind_Word(linklisthead,charsch[])//统计sch在文章中出现的次数

{

intcount;

for()//在每一行中查找;

{

for()

{采用简单串匹配算法;每找到一个匹配串则计数器加1;}

returncount;

}

4)删除模块

linklistDel_String(linklisthead,charsch[])//删除指定的字符串

{

for()//遍历每一行

{

每搜索到一个相同的字符串,清空,并把后面的字符串前移

}

}

5)主程序模块

voidmain()

{

while标志)

switch()

case标志:

命令;break;

case标志:

命令;break;

......

default:

输出提示语,输入代码有误;

}

各模块之间的关系

主程序模块momokuai

文本输入输出模块

文本信息统计模块

文本查询模块

文本删除模块

三、详细设计

#include

#include

#include

#include

1、行结点

typedefstructLNode

{

char*data;

LNode*next;

}LNode,*linklist;

2、创建文本

linklistCreateTXT()

{

chartemp[80];

inti,N;

cout<<"请问共要输入几行?

";

cin>>N;

cout<<"请输入文本:

"<

linklistp,head;

p=newLNode;

p->data=NULL;

p->next=NULL;

head=p;

for(i=0;i

{

gets(temp);//以回车键作为行结束标志,却不接收最后一个回车键

p->next=newLNode;

p=p->next;

p->data=newchar[strlen(temp)+1];//申请字符串大小的空间(比字符串大1,用于存放字符串结束标识符)

strcpy(p->data,temp);

p->data[strlen(temp)]='\0';

}

p->next=NULL;

returnhead;

}

3、输出文本

voidOutPutTxt(linklisthead)

{

linklistp;

inti;

p=head->next;

while(p)

{

for(i=0;p->data[i]!

='\0';i++)

cout<data[i];

cout<

p=p->next;

}

}

4、统计文章总字数

intCount_All_Word(linklisthead)

{

intcount=0;

linklistp;

p=head->next;

while(p)

{

count=count+strlen(p->data);

p=p->next;

}

returncount;

}

5、统计文章数字数

intCount_Num(linklisthead)

{

intcount=0;

linklistp;

p=head->next;

while(p)

{

for(inti=0;p->data[i]!

='\0';i++)

if(p->data[i]>='0'&&p->data[i]<='9')

count++;

p=p->next;

}

returncount;

}

6、统计文章字母数

intCount_ZM(linklisthead)

{

intcount=0;

linklistp;

p=head->next;

while(p)

{

for(inti=0;p->data[i]!

='\0';i++)

if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z'))

count++;

p=p->next;

}

returncount;

}

7、统计文章空格数

intCount_Space(linklisthead)

{

intcount=0;

linklistp;

p=head->next;

while(p)

{

for(inti=0;p->data[i]!

='\0';i++)

if(p->data[i]=='')

count++;

p=p->next;

}

returncount;

}

8、查找字符串

intFind_Word(linklisthead,charsch[])

{

intcount=0,i,j,len1,len2,b,k;

linklistp;

p=head->next;

len2=strlen(sch);

while(p)

{

len1=strlen(p->data);

b=len1-len2;

for(i=0;i<=b;i++)

{ for(k=i,j=0;j

{

if(p->data[k]==sch[j])

{k++;j++;}

elsebreak;

}

if(j==len2)

count++;

}

p=p->next;

}

returncount;

}

9、删除字符串

linklistDel_String(linklisthead,charsch[])

{

intcount=0,i,j,len1,len2,b,k;

linklistp;

p=head->next;

len2=strlen(sch);

while(p)

{

len1=strlen(p->data);

b=len1-len2;

for(i=0;i<=b;i++)

{ for(k=i,j=0;j

{

if(p->data[k]==sch[j])

{k++;j++;}

elsebreak;

}

if(j==len2)//如果找到相同的串就删除并移动后面的字符串

{

while(p->data[k])

{p->data[k-len2]=p->data[k];

p->data[k]=NULL;

k++;}

len1=strlen(p->data);//修正串长

b=len1-len2;//修正参数

i=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1