文章编辑程序设计报告文档格式.docx
《文章编辑程序设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《文章编辑程序设计报告文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
1、定义结构体structline,文本行采用顺序存储,行与行之间采用链式存储
2、主要函数:
intFindString(LINE*&
head,char*str)/*统计str在文章中出现的次数*/
求在一行中Str出现的次数的流程图:
①.查找第一个字符,如果有第一个字符即p->
data[i]==str[0],设计数器k=0
②.查找这个字符后面的字符与要查找的字符串是否匹配即p->
data[i+j]==str[j],如果匹配k++
③.重复第二步,如果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)为结尾(每行最多输入80个字符):
LINE*p=newLINE;
//首先为链表建立一个附加表头结点
head=p;
//将付给表头指针
chartmp[100];
while
(1)
{
gets(tmp);
//输入字符串
if(strlen(tmp)>
80)
printf("
每行最多输入80个字符!
"
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++;
while((p=p->
printf("
文章中数字个数:
%d\n"
count);
voidCountSpace(LINE*&
data[i]==32)count++;
空?
格?
个?
数º
y:
voidCountAll(LINE*&
do
count+=strlen(p->
文章总字数:
intlen1=0;
intlen2;
inti,j,k;
charstr1[20];
请输入要统计的字符串:
scanf("
%s"
str1);
len2=strlen(str1);
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+