/*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(strcmpid,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;
}
}
}