数据结构课程设计 文章编辑Word格式.docx
《数据结构课程设计 文章编辑Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 文章编辑Word格式.docx(23页珍藏版)》请在冰点文库上搜索。
![数据结构课程设计 文章编辑Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/beddb43c-bf31-4b01-9976-4837dc1dae1e/beddb43c-bf31-4b01-9976-4837dc1dae1e1.gif)
3、删除某一子串,并将后面的字符前移。
4、实现功能:
⑴分行输出用户输入的各行字符;
⑵分4行输出“全部字母数”、“数字个数”、“空格个数”、“文章总字数”
⑶输出删除某一字符串后的文章。
四、主要数据结构与算法
1、主要数据结构
1.1主要数据结构
函数名
实现功能
typedefstruct{DataTypea[MAXSIZE];
intlength;
}Article;
定义串的静态存储分配结构
voidinput(Article*s)
输入文本
voidptint(Article*s)
输出文本
voidletter_number(Article*s)
输出全部字母个数
voidspace_number(Article*s)
输出全部空格个数
voiddigit_number(Article*s)
输出全部数字总数
voidsize_number(Article*s)
输出文章总字数
voiddele_print(Article*p,Article*s)
输出删除某一字符串后的文章
voidCounter(Article*p,Article*s)
统计某个字符串在文章中出现的次数
表1主要数据结构
1.2程序流程图
图1程序流程图
2、主要算法设计
2.1输入文本
输入一段文本,当输入的文本是回车符(“\n”)时,将输入的文本最后一个字符赋成字符串的结束符’\0’,然后修改输入文本的长度。
voidinput(Article*s)/**输入文本**/
{
inti;
s->
length=0;
for(i=0;
i<
MAXSIZE;
i++)
{
scanf("
%c"
&
(s->
a[i]));
s->
length++;
if(s->
a[i]=='
\n'
)
{
s->
a[i]='
\0'
;
length--;
break;
}
}
}
2.2输出文本
将输入的文本,如果输入文本的长度为0,则以错误提示出现在屏幕上,若长度不为0,则以每行显示80个字符的格式输出在屏幕上。
voidptint(Article*s)/*输出文本*/
inti,j=0;
if(!
s->
length)
printf("
\n错误!
"
);
else
for(i=0;
length;
printf("
s->
a[i]);
j++;
if(j%80==0)
printf("
\n"
2.3输出删除某一字符串后的文章
此函数用到了串的简单模式匹配,即:
设置一个标记succ,当正文串s与模式串匹配成功时,标记succ=1;
当正文串s与模式串匹配不成功时,succ=0。
最后根据标记的值来判断时候找到匹配的子串,最终实现删除操作。
voiddele_print(Article*p,Article*s)/*输出删除某一字符串后的文章*/
inti,j,succ,flag=1;
i=0;
while((i<
=s->
length-p->
length+1))
j=0;
succ=1;
/*用j扫描模式p*/
while((j<
=p->
length-1)&
&
succ)
if(p->
a[j]==s->
a[i+j])
j++;
else
succ=0;
if(j==p->
length)
flag=0;
if(!
succ)
{
else
i=i+p->
length-1;
i++;
printf("
%s\n"
a+i);
if(flag==1)
但找不到要删除的字符串!
2.4统计某个字符串在文章中出现的次数
此函数也用到了串的简单模式匹配,即:
最后根据标记的值来判断时候找到匹配的子串。
设置一个计数标记k,当匹配成功时,将匹配的结果记录保存下来后,最后输出统计特殊字符串出现的次数。
voidCounter(Article*p,Article*s)/*统计某个字符串在文章中出现的次数*/
inti,j,succ,k=0;
elsesucc=0;
if(succ)
k++;
if(k>
0)
\n该字符串在文章中出现的次数为:
%d次\n"
k);
五、调试与分析
1、菜单主界面
图2主界面
2、输入函数
由于程序的功能的不足,虽然可以输入中文,但是不能够统计中文字符的个数。
图3输入文本
3、输出文本
在输入一段文本之后的显示输出文本如下图所示,每行最多输入80个字符。
图4输出文本
4、统计文字、数字、空格的个数
图5统计文字、数字、空格的个数
5、统计某个字符串在文章中出现的次数
图6统计某个字符串在文章中出现的次数
6、输出删除某一字符串后的文章
由于程序不够完善,不能进行连续的删除操作,只能进行一次删除操作后再返回主菜单,继续调用删除函数时,不能够接着第一次删除操作后得到的结果再删除字符串,运行结果如图8所示。
同时在输出文章中没有出现过的字符串时,由于程序功能的欠缺,程序功能还是会将原文章打印出来。
不能很有效地提示删除不成功,或者提示重新输入之类的提示语。
运行结果如图9所示。
图7删除某一字符串后显示的文章
图8删除功能缺点一
图9删除功能缺点二
六、总结
通过五天的课程设计的内容,我完成了文章编辑题目的设计。
但是程序还不够完善,因为有些功能还是不能够实现。
例如:
在执行菜单时,第一次选择删除删除特殊字符串的操作时,特殊字符串被删除了后,又返回主菜单,继续再选择删除功能时,第一次被删除后得到的结果,继续再删除就不能进行了。
在设计过程中,设计删除函数时,其中用到串的模式匹配,在匹配时出现了错误,导致程序一直不能执行下去,通过老师和同学的帮助下,也一一解决了,同时也锻炼了调试程序的能力。
还有在用指针时,没开辟存储空间,程序也不能执行。
但是通过这次的课程设计,加强了我的动手、思考和解决问题的能力。
设计的结果固然重要,但是设计过程更为重要,在这次的作业中,我学到了很多的东西,也积累了关于做这样的课程设计的一些经验。
通过这一次的课程设计,让我对《数据结构》以及其课程设计的知识也有了更深的理解和认识。
所以,我们在理解书本知识的同时,应该尽可能多做一些算法题,提高自己分析问题和解决问题的能力,这也是学习这门课程最终的目的。
七、参考文献
[1]王震江,何英,吴绍兵.数据结构.云南:
云南大学出版社,2008
[2]谭浩强.C程序设计(第四版).北京:
清华大学出版社,2010
[3]王爱民,李杰,罗颖.数据结构(C语言描述).北京:
清华大学出版社,2011
八、程序清单
#include<
string.h>
stdio.h>
stdlib.h>
malloc.h>
conio.h>
#defineMAXSIZE1000
typedefcharDataType;
typedefstruct
DataTypestr[MAXSIZE];
intlength;
}Article;
Article*s,*p,*t,*m;
str[i]));
str[i]=='
str[i]='
str[i]);
voidletter_number(Article*s)/*全部字母个数*/
\n错误!
if((s->
str[i]>
='
a'
str[i]<
z'
)||(s->
A'
Z'
))
%d"
j);
voidspace_number(Article*s)/*全部空格个数*/
if(s->
'
)
voiddigit_number(Article*s)/*全部数字总数*/
0'
9'
voidsize_number(Article*s)/*文章总字数*/
length);
str[j]==s->
str[i+j])
str+i);
voidmain()
charn;
Article*s,*t,*m;
system("
color3F"
\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"
\t┃*设计题目:
文章编辑*┃\n"
\t┃************************************************************┃\n"
\t┃*☆☆☆昆明学院信息技术学院☆☆☆*┃\n"
\t┃*∮2011级计科2班杨铄201111010234∮*┃\n"
\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"
PAUSE"
cls"
color3f"
菜单列表\n"
\t┃***┃\n"
\t┃*0.退出*1.输入一段文字*┃\n"
\t┃*2.显示输入的文字*3.统计字母、数字、空格*┃\n"
\t┃*4.统计特殊字符串出现频率*5.删除某一特殊字符串*┃\n"
while((n='
)&
(n='
1'
2'
3'
4'
5'
{
\n请选择你需要操作的步骤(0~5):
fflush(stdin);
%s"
n);
switch(n)
{
case'
:
{
exit(0);
}
s=(Article*)malloc(sizeof(Article));
printf("
请输入一段文字:
input(s);
break;
\n文本录入完毕!
输出的文本为:
ptint(s);
\n全部字母个数为:
letter_number(s);
\n全部空格个数为:
space_number(s);
\n全部数字个数为:
digit_number(s);
\n文章总字数为:
size_number(s);
m=(Article*)malloc(sizeof(Article));
\n请输入要统计的字符串:
input(m);
\n统计字符串的结果为:
Counter(m,s);
{
t=(Article*)malloc(sizeof(Article));
\n请输入要删除的字符串:
input(t);
\n结果为:
dele_print(t,s);
}