庞贝贝-1104040216-课设报告3-文章编辑Word文档下载推荐.doc
《庞贝贝-1104040216-课设报告3-文章编辑Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《庞贝贝-1104040216-课设报告3-文章编辑Word文档下载推荐.doc(15页珍藏版)》请在冰豆网上搜索。
输出形式:
(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)//统计字母数
if(('
a'
<
=字符<
='
z'
)||'
A'
=字符<
Z'
))
count++;
intCount_All_Word(linklisthead)//统计文章的总字数
count=count+每行的字符长度;
intCount_Num(linklisthead)//统计数字数
intcount;
if(’0’<
=’9’)
3)查找模块
intFind_Word(linklisthead,charsch[])//统计sch在文章中出现的次数
for()//在每一行中查找;
for()
{采用简单串匹配算法;
每找到一个匹配串则计数器加1;
4)删除模块
linklistDel_String(linklisthead,charsch[])//删除指定的字符串
for()//遍历每一行
每搜索到一个相同的字符串,清空,并把后面的字符串前移
5)主程序模块
voidmain()
while标志)
switch()
case标志:
命令;
break;
......
default:
输出提示语,输入代码有误;
各模块之间的关系
主程序模块momokuai
文本输入输出模块
文本信息统计模块
文本查询模块
文本删除模块
三、详细设计
#include<
iostream.h>
#include<
stdio.h>
stdlib.h>
string.h>
1、行结点
char*data;
LNode*next;
2、创建文本
chartemp[80];
inti,N;
cout<
请问共要输入几行?
;
cin>
>
N;
请输入文本:
endl;
linklistp,head;
p=newLNode;
p->
data=NULL;
next=NULL;
head=p;
for(i=0;
i<
i++)
gets(temp);
//以回车键作为行结束标志,却不接收最后一个回车键
next=newLNode;
p=p->
next;
data=newchar[strlen(temp)+1];
//申请字符串大小的空间(比字符串大1,用于存放字符串结束标识符)
strcpy(p->
data,temp);
data[strlen(temp)]='
\0'
returnhead;
}
3、输出文本
linklistp;
inti;
p=head->
while(p)
for(i=0;
p->
data[i]!
cout<
data[i];
cout<
p=p->
4、统计文章总字数
intCount_All_Word(linklisthead)
intcount=0;
count=count+strlen(p->
data);
p=p->
returncount;
5、统计文章数字数
intCount_Num(linklisthead)
for(inti=0;
if(p->
data[i]>
0'
&
data[i]<
9'
)
count++;
6、统计文章字母数
intCount_ZM(linklisthead)
if((p->
)||(p->
7、统计文章空格数
intCount_Space(linklisthead)
data[i]=='
'
8、查找字符串
intFind_Word(linklisthead,charsch[])
intcount=0,i,j,len1,len2,b,k;
len2=strlen(sch);
len1=strlen(p->
b=len1-len2;
=b;
{ for(k=i,j=0;
j<
len2;
{
data[k]==sch[j])
{k++;
j++;
elsebreak;
}
if(j==len2)
}
9、删除字符串
linklistDel_String(linklisthead,charsch[])
intcount=0,i,j,len1,len2,b,k;
)//寻找相同的串;
if(j==len2)//如果找到相同的串就删除并移动后面的字符串
{
while(p->
data[k])
{p->
data[k-len2]=p->
data[k];
p->
data[k]=NULL;
k++;
len1=strlen(p->
//修正串长
b=len1-len2;
//修正参数
i=0;