文章编辑系统的设计与实现-创新互联
输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;
成都创新互联公司是专业的大关网站建设公司,大关接单;提供成都做网站、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大关网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!5.2问题分析和任务定义(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
(3)输出删除某一字符串后的文章;
5.3 数据类型和系统设计(1)存储结构设计
使用链表存储结构
(2)系统功能设计
- 建立文章编辑系统。输入所要编辑的文章,由函数ceatword()函数实现;
- 显示输入的文本,由函数printWord()实现;
- 统计英文字母数和空格数,以及整篇文章的总字数,由函数countWord()实现;
- 查找字符,由函数sreachWord()实现;
- 统计某一字符在文章中出现的次数和位置,由函数strcpy()实现;
- 删除字符,由函数DeleteWord()实现;
- 插入字符,由函数Insert Word()实现;
- 建立菜单;
#include
#include
typedef struct line //定义串结构
{
char *data; //定义指向字符的指针
struct line *next; //定义指向下一个结点的指针
}LINE;
(1)创建链表,向里面输入文本数据
void OutPut(LINE * &head) //向屏幕输出文字
{
LINE *p=head; //定义指针p
do{
printf("%s\n",p->data);
}
while((p=p->next)!=NULL); //遍历链表
printf("\n");
}
(2)主函数
void menu(){
printf("***********编辑指令***********\n");
printf("1:统计文章中总字符数 \n");
printf("2:统计文章中空格个数 \n");
printf("3:统计文章中数字个数 \n");
printf("4:统计文章中英文字母数 \n");
printf("5:删除文章中指定字符串 \n");
printf("6:统计文章中指定字符串出现次数\n");
printf("******************************\n");
}
void Create(LINE * &head)
{
printf ("请输入文章,每行最多80个字符,以Ctrl+E(^E)为结束符\n");
LINE *p=new LINE; //首先为链表建立一个附加表头结点
head=p; //将付给表头指针
char tmp[100];
while(1)
{
gets(tmp); //输入字符串
if(strlen(tmp)>80)
{
printf("每行最多输入80个字符!");
break;
}
if(tmp[0]==5)break; //如果发现输入^E,则退出输入
p=p->next=new LINE;
p->data=new char[strlen(tmp)+1]; //为结点分配空间
strcpy(p->data,tmp);
if(tmp[strlen(tmp)-1]==5) //除去最后一个控制符^E
{
p->data[strlen(tmp)-1]='\0';
break;
}
}
p->next=NULL; //最后一个指针为空
head=head->next;
printf("\n");
menu();
}
(3)统计英文字母数
void CountLetter(LINE * &head) //统计英文字母数
{
LINE *p=head;
int count=0;
do{
int Len=strlen(p->data); //计算当前data里的数据元素个数
for(int i=0;i
if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z'))
count++;
} //计算字母数
while((p=p->next)!=NULL); //遍历链表
printf("文章中英文字母个数: %d \n", count);//返回文章里
printf("******************************\n");
printf("\n");
menu();
}
(4)统计数字数
void CountNumber(LINE * &head)
{
LINE *p=head;
int count=0;
do{
int Len=strlen(p->data);
for(int i=0;i
if(p->data[i]>=48 && p->data[i]<=57)count++;
}
while((p=p->next)!=NULL);
printf("文章中数字个数: %d \n",count);
printf("******************************\n");
printf("\n");
menu();
}
(5)统计空格数
void CountSpace(LINE * &head)
{
LINE *p=head;
int count=0;
do{
int Len=strlen(p->data);
for(int i=0;i
if(p->data[i]==32)count++;
}
while((p=p->next)!=NULL);
printf("文章中空格个数: %d \n", count);
printf("******************************\n");
printf("\n");
menu();
}
(6)显示所有字母的个数
void CountAll(LINE * &head)
{
LINE *p=head;
int count=0;
do{
count+=strlen(p->data);
}
while((p=p->next)!=NULL);
printf("文章总字数: %d \n",count);
printf("******************************\n");
printf("\n");
menu();
}
(7)寻找字符串
void FindString(LINE * &head)
{
LINE *p=head;
int count=0;
int len1=0;
int len2;
int i,j,k;
char str1[20];
printf("\n");
printf("请输入要统计的字符串:");
scanf("%s",str1);
len2=strlen(str1);
do {
len1=strlen(p->data);
for(i=0;i
{
if(p->data[i]==str1[0])
{
k=0;
for(j=0;j
if(p->data[i+j]==str1[j]) k++;
if(k==len2) {count++;i=i+k-1;}
}
}
}
while((p=p->next)!=NULL);//遍历链表
printf("该字符串在文中出现的次数: %d \n",count);
printf("******************************\n");
printf("\n");
menu();
}
(8)删除目标字符串
void delstringword(char *s,char *str) //删除指定的字符串
{ //*s为输入的字符串,*str为将要删除的字符
char *p=strstr(s,str); //从字符串中寻找str第一次出现的位置
char tmp[80];
int len=strlen(s);
int i=len-strlen(p);
int j=i+strlen(str);
int count=0;
for(int m=0;m
for(int n=j;n
tmp[count]='\0';
strcpy(s,tmp);
}
void DelString(LINE * &head)
{
LINE *p=head;
char str[20];
printf("请输入要删除的字符串: ");
scanf("%s",str);
do
{
if(strstr(p->data,str)!=NULL)delstringword(p->data,str);
}
while((p=p->next)!=NULL);
printf("删除指定字符串后的文章为: \n");
OutPut(head);
printf("******************************\n");
printf("\n");
menu();
}
int main()
{
LINE *head;
int i;
Create(head);
for(;;)
{
printf("执行指令: ");
scanf("%d",&i);
switch(i)
{
case 1:CountAll(head);break;
case 2:CountSpace(head);break;
case 3:CountNumber(head);break;
case 4:CountLetter(head);break;
case 5:DelString(head);break;
case 6:FindString(head);break;
default:printf("指令输入错误\n\n");
}
}
}
5.5 测试结果1.输入文章:
2.进行功能操作
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
新闻名称:文章编辑系统的设计与实现-创新互联
URL链接:http://scpengxi.com/article/cdpiec.html