文章编辑程序设计报告Word下载.docx
- 文档编号:8429071
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:16
- 大小:361.66KB
文章编辑程序设计报告Word下载.docx
《文章编辑程序设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《文章编辑程序设计报告Word下载.docx(16页珍藏版)》请在冰点文库上搜索。
③.重复第二步,如果k=len2,则查找到,count++;
如果没查找到,重新进行第一步
voiddelstringword(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
三、详细设计:
3.1详细设计思想:
(1)定义结构体:
typedefstructline
{
char*data;
structline*next;
}LINE;
(2)输出函数voidOutPut(LINE*&
head)
将头指针赋值为p;
通过do-while语句遍历链表;
(3)字符串的创建函数:
voidCreate(LINE*&
head)
用printf语句输出一句提醒语句,请用户输入要编辑的文章
为链表建立一个附加表头结点,将p付给表头指针;
输入字符串,同时判断输入的字符串是否满足条件;
用if语句判断文章是否输入完成。
(4)统计文章中英文字母数:
voidcountLetter(LINE*&
将p付给表头指针;
初始化count为0;
用do-while语句遍历链表,同时统计字符串中英文字母数
用printf语句输出文章中英文字母数,调用子函数menu().
(5)统计文章中数字个数:
voidcountNumber(LINE *&
用do-while语句遍历链表,同时统计字符串中数字个数;
用printf语句输出文章中数字个数,调用子函数menu().
(6)统计文章中的空格数:
voidcountSpace(LINE*&
用do-while语句遍历链表,同时统计字符串中空格数;
用printf语句输出文章中空格数,调用子函数menu().
(7)统计文章总字数:
voidcountAll(LINE*&
将p付给表头指针;
用do-while语句遍历链表,同时统计字符串中总字数;
用printf语句输出文章中总字数,调用子函数menu().
(8)查找字符串的函数:
voidFindString(LINE*&
初始化count为0;
初始化len1,用来保存当前行的总字符数;
定义整型变量len2表示待统计字符串的长度;
用printf语句提醒用户输入要统计的字符串;
用do-while语句遍历链表,同时用for循环和if语句找出指定字符串在文章中出现的次数;
用printf语句输出指定字符串在文章中出现的总次数,调用子函数menu().
(9)删除字符串的函数:
voidDelString(LINE*&
先创建一个delstringword,其中包含两个字符串char*s和char*str,用*s表示输入的字符串,*str表示要删除的字符。
这个函数的功能是找到字符串s在字符串中出现的位置并删除该字符串。
定义字符串的删除函数DelString(),用do-while语句遍历链表,语句中再套用if语句,并调用delstringword()进行删除.
(10)主函数:
voidmain()
用switch语句实现功能的调用。
一个数字对应一个操作。
3.2核心代码:
#include<
string.h>
stdio.h>
/*文本每行以字符串形式存储,行与行之间以链表存储*/
char*data;
structline*next;
/*创建一链表,同时向里面输入文本数据*/
/*向屏幕输出文章*/
voidOutPut(LINE*&
{
LINE*p=head;
printf("
输入的文章为:
\n"
);
do
{
%s\n"
p->
data);
}
while((p=p->
next)!
=NULL);
/*遍历链表*/
}
voidmenu()
*********************文章编辑**********************\n"
***************************************************\n"
1.统计文章中全部英文字母数\n"
2.统计文章中空格个数\n"
3.统计文章中数字个数\n"
4.统计文章总字数\n"
5.统计指定字符串在文中出现的次数\n"
6.删除指定字符串\n"
voidCreate(LINE*&
printf("
请输入一页文章,以Ctrl+E(^E)为结尾(每行最多输入字符!
):
LINE*p=newLINE;
/*首先为链表建立一个附加表头结点*/
head=p;
/*将p付给表头指针*/
chartmp[100];
while
(1)
{
gets(tmp);
/*输入字符串!
*/
if(strlen(tmp)>
80)
printf("
每行最多输入字符"
break;
}
if(tmp[0]==5)break;
/*如果发现输入^E,则退出输入*/
p=p->
next=newLINE;
p->
data=newchar[strlen(tmp)+1];
/*为结点分配空间*/
strcpy(p->
data,tmp);
if(tmp[strlen(tmp)-1]==5)/*除去最后一个控制符^E*/
data[strlen(tmp)-1]='
\0'
;
break;
next=NULL;
/*最后的一个指针为空*/
head=head->
next;
OutPut(head);
menu();
/*统计英文字母数*/
voidCountLetter(LINE*&
intcount=0;
intLen=strlen(p->
/*计算当前data里的数据元素的个数*/
for(inti=0;
i<
Len;
i++)
if((p->
data[i]>
='
a'
&
p->
data[i]<
z'
)||(p->
A'
Z'
))/*计算字母数*/
count++;
/*遍历链表*/
全部英文字母数:
%d\n"
count);
/*返回文章的字母总数*/
/*统计数字数*/
voidCountNumber(LINE*&
if(p->
=48&
=57)count++;
/*计算数字数,ASCII码*/
文章中数字个数:
%d\n"
count);
/*统计空格数*/
voidCountSpace(LINE*&
data[i]==32)count++;
/*计算空格数,空格ASCII码为*/
while((p=p->
空格个数:
/*统计文章的总字数*/
voidCountAll(LINE*&
/*保存链表的首地址*/
do/*计算总字符数*/
count+=strlen(p->
文章总字数:
/*统计str在文章中出现的次数*/
intlen1=0;
/*保存当前行的总字符数*/
intlen2;
/*待统计字符串的长度*/
inti,j,k;
charstr1[20];
请输入要统计的字符串:
"
scanf("
%s"
str1);
len2=strlen(str1);
do
len1=strlen(p->
/*当前行的字符数*/
for(i=0;
len1;
i++)/*字符匹配*/
{
if(p->
data[i]==str1[0])
{
k=0;
for(j=0;
j<
len2;
j++)
data[i+j]==str1[j])k++;
if(k==len2){count++;
i=i+k-1;
}
该字符串在文中出现的次数:
/*删除指定的字符串*/
voiddelstringword(char*s,char*str)
/**s为输入的字符串,*str为将要删除的字符*/
char*p=strstr(s,str);
/*从字符串s中寻找str第一次出现的位置*/
chartmp[80];
intlen=strlen(s);
inti=len-strlen(p);
intj=i+strlen(str);
for(intm=0;
m<
i;
m++)tmp[count++]=s[m];
for(intn=j;
n<
len;
n++)tmp[count++]=s[n];
tmp[count]='
strcpy(s,tmp);
/*返回新的字符串*/
charstr[20];
请输入要删除的某一字符串:
str);
if(strstr(p->
data,str)!
=NULL)delstringword(p->
data,str);
删除指定字符串后的文章为:
\n"
LINE*head;
inti;
Create(head);
for(;
)
请输入到中任意一个数字:
%d"
&
i);
switch(i)
case1:
CountLetter(head);
break;
case2:
CountSpace(head);
case3:
CountAll(head);
case4:
CountNumber(head);
case5:
FindString(head);
case6:
DelString(head);
default:
printf("
您输入的数字错误\n"
四、调试分析:
1.测试数据及结果
2、问题思考:
输入文章时,计算机怎样识别文章是否结束?
输出文章时,怎样处理表示结束的字符?
解决方案:
输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入^E,则退出输入。
输出时文章时,如果tmp[strlen(tmp)-1]==5即发现表示结束的字符^E,用p->
除去最后一个控制符^E。
3.算法改进:
本程序的文章为用户输入的文章,只能做即时输入的统计、编辑,而不能对已有的磁盘文件中的文章进行统计、编辑,如果引入文件流类,就可以打开磁盘文件,对其进行统计、编辑并保存,这是有待改进的。
五、总结
此次课程设计使我对数据结构方面的知识有了更加深入的了解,也使我认识到自己在学习编程方面还有很多的不足。
今后我要多读一些编程方面的书籍,不能只拘泥于课本上的知识,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想。
同时,此次课程设计也使我对编程产生了兴趣,特别是在通过查书籍资料以及网上资源的情况下能够使程序运行成功,得到了一种成就感,相对于以前的一组人完成一个程序,此次一个人独立完成成就感更大一些。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文章 编辑 程序设计 报告