文章编辑系统的设计与实现-创新互联

5.文章编辑系统的设计与实现 5.1问题的描述

输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过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()实现;
  • 建立菜单;
5.4 编码实现

#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元起,快前往官网查看详情吧


网站栏目:文章编辑系统的设计与实现-创新互联
分享网址:http://ybzwz.com/article/cdpiec.html