/*5、文章编辑
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求:
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
(3)输出删除某一字符串后的文章;
*/
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct line
{
char *data;
struct line *next;
}LINE;
void create(LINE*&head)
{
printf("请输入一页文章,以ctrl+E(^E)为结尾(每行最多输入80字符!):\n");
LINE *P=new LINE;
head=p;
char ch[100];
while(1)
{
gets(ch);
if(strlen(ch)>80)
{
printf(",每行不超过输入80个字符");
break;
}
if(ch[0]==5)break;
p=p->next=new LINE;
P->data=new char[strlen(ch)+1);
strcpy(p->data,ch);
if(ch[strlen(ch)-1]='\0';
break;
}
}
p->next=NULL;
head=head->next;
}
/**文本字数统计**/
int count_space(LINE*&head)//统计空格数
{LINE*P=head;
int asc_space=32;
int count=0;
int i;
int len;
do{
len=strlen(p->data);
for(i=0;i<len;i++)
if(p->data[i]=asc_space)
count++;
}while ((p=p->next)!NULL);
return count;
}
int count_num(LINE* &head)//统计数字个数
{
LINE*P=head;
int count=0;
int len;
int i;
do{
len=strlen(p->data);
for(i=0;i<len;i++)
if(p->data[i]>=48&&p->data[i]<=57)
count++;
}while((p=p->next)!=NULL);
return count;
}
int count_letter(LINE*&head)//统计字母数
{
LINE*P=head;
int count=0;
int len;
int i;
do{
len=strlen(p->data);
for(i=0;i<len;i++)
if(P->data[i]>='a' && p->data[i]<='z'||p->data[i]>='A'&& p->data[i]<='Z')
count++;//计算字母个数
}
while((p=p->next)!=NULL);
return count;
}
int Find Word (LINE* &head,char*sch)//统计sch在文章中出现的次数
{
LINE*p=head;
int cunnt=0;
int len1=0;
int len2=strlen(sch);
int i,j,k;
do
{
len=strlen(p->data);//当前行的字符数
for(i=0;i<len;i++)
{
if(p->data[i]==sch[0])
{
k=0;
for(j=0;j<=len2-1;j++)
if(p->data[i+j]==sch[j]k=k+1;
if(k==len2){count++;i=i+k-1;
}
}
}while ((p=p->next)!=NULL);
return count;
}
/**特定字符的删除**/
void del_string_word(char*s ,char*sch)
{
char*p=strstr(s,sch);
char tmp[80]
int len=strlen(s);
int k,kk;
int i=len-strlen(p)
int j=i+strlen(sch)
int count=0;
for (k=0;k<i;k++)
tmp[count++]=s[k];
for(kk=j;kk<len;kk++)
tmp[count++]=s[kk];
tmp[count]='\0';
strcpy(s,tmp);
}
void del_string(LINE* &head,char *sch)//删除指定的字符串
{
LINE*P=head;
do{
while(strstr(p-data,sch)!=NULL)
del_string word(p->data,sch);
}while((p=p->next)!=NULL);
}
void count(LINE*&head)//向屏幕输出文章
{
LINE*p=head;
printf(“文本文件输出如下:”);
Do
{ printf(“%s\n”,p->data);
}while ((p=p->next)!=NULL);
}
void count(LINE *&head)
{
printf(“文章统计信息结果如下:\n”);
printf(“英文字母数:%d\n”,count_letter(head));
Printf(“空格数:%d\n”,count_space(head));
Printf(“文章中共出现数字:%d\n”,count_num(head));
Printf(“文章出现的汉字和标点(全角)总数:%d\n”,(count_all_word (head)-count_num(head)-count_space(head)-count_letter(head))/2);
Printf(“统计文章的总字数:%d\n”,(count_all_word (head)+count_num(head)+count_space(head)+count_letter(head))/2);
Printf(“\n”);
}
void main()
{LINE*head;
char sch[20];
char id [10];
char ch;
char tmp_sch[20];
printf(“ 文章编辑系统\n\n”);
printf(“ 开发者:李红星\n”);
printf(“ 学号:201420181015\n\n”);
printf(“**************欢迎使用***************\n\n”);
While(1)
{
printf(“*************************************\n”);
printf(“ 1.新建文本\n”);
printf(“ 2.浏览输入文本\n”);
printf(“ 3.文本字符统计\n”);
printf(“ 4.特定字符串的统计\n”);
printf(“ 5.特定字符串的删除\n”);
printf(“ 6.退出\n”);
printf(“ 2.浏览输入文本\n”);
printf(“****************************************\n”);
printf(“注:请您按关键字代号选择菜单操作!如是第一次操作,务必先选第一步!\n”);
printf(“请输入序号:”);
Scanf(“%s”,id);
While(1)
{
if(strcmp(id,“1”)==0)
{
printf(“新建文本要覆盖已有文本,是否继续输入?(Y/N)\n”);
getchar()
scanf(“%c”,&ch);
system(“cls”);
if(ch==‘n’||ch==‘N’)
break;
else if(ch==‘y’||ch==‘Y’)
create(head);
break;
}
else if(strcmp(id,“2”)==0)
{
system(“cls”);
outputtxt(head);
break;
}
else if(strcmp(id,“4”)==0)
{
system(“cls”);
printf(“请输入要统计的字符串:”);
scanf(“%s”,&sch);
printf(“\n”);
printf(“出现的次数为: %d\n”,find_word(head,sch));
break;
}
else if(strcmp(id,“5”)==0)
system(“cls”);
printf(“请输入要删除的某一字符串:”);
scanf(“%s”,tmp_sch);
printf(“\n”)
outputtxt(head);
del_string(head,tmp_sch);
print(“删除后”);
outputtxt(head);
break;
}
Else if(strcmp(id,“6”)==0)
{
printf(“您确定要退出系统了吗?(Y/N)\n”);
getchar();
scanf(“%c”,&ch);
system(“cls”);
if(ch==‘n’||ch==‘N’)
break;
else if(ch==‘y’||ch==‘Y’)exit(0);
}
Else
{
system(“cls”);
printf(“您输入的字母有错,请重新输入!\n\n”);
break;
}
}
}