文章编辑
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;
要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
一.程序
#include
#include
#include
struct ca{
char c;
ca *next;
};
void InitList(ca *L)
{//输入以“#”结束的文章
cout<
while((L->c=getchar())!='#'){
L->next=new ca;
L=L->next;
}
L->next=NULL;
}
void StrNo(ca *L){//统计某以字符串在文章中出现的次数
int n=0;
char s[80],*q;
ca *p;
cout<
cin>>s;
while(L->next){
for(p=L,q=s;*q!='\0'&&p->next;p=p->next,q++)
if(p->c!=*q)break;
if(*q=='\0')n++;
L=L->next;
}
cout<
}
ca *DelStr(ca *L){//删除某一子串
ca *H=L;
char s[80],*q;
ca *p;
cout<
cin>>s;
if(H->c==*s){
for(p=H->next,q=s+1;*q!='\0'&&p->next;p=p->next,q++)
if(p->c!=*q)break;
if(*q=='\0')H=p;
}
while(L->next){
for(p=L->next,q=s;*q!='\0'&&p->next;p=p->next,q++)
if(p->c!=*q)break;
if(*q=='\0')L->next=p;
else L=L->next;
}
return H;
}
void fenhang(ca *L){//分行输出用户输入的各行字符
while(L->next){
cout<c;
L=L->next;
}
cout<
}
void tongji(ca *L,int &p1,int &p2,int &p3,int &n){//统计中英文字母和空格数以及整篇文章总数
n=p1=p2=p3=0;
for( ;L->next;L=L->next,n++)
if(isalpha(L->c))p1++;
else if(isdigit(L->c))p2++;
else if(L->c==' ')p3++;
else if(L->c=='\n')n--;
cout<
cout<
cout<
cout<
}
void main(){
ca *L=new ca;
int p1,p2,p3,n,c;
InitList(L);
do{
cout<
"1;统计中英文字母和空格数以及整篇文章总字数\n"
"2:统计某一字符串在文章中出现次数\n"
"3:删除某一子串\n"
"4:分行输出用户输入的各行字符\n";
cin>>c;
switch(c){
case 1:tongji(L,p1,p2,p3,n);break;
case 2:StrNo(L);break;
case 3:DelStr(L);
case 4:fenhang(L);
}
}while(c);
}
二、调试分析:
1. 测试数据及结果
(1)先输入一串字符、空格和数字,再回车。接着输入1回车,统计中英文字母和空格以及整篇文章总字数
(2)再输入2回车,接着输入所要查的字符串love回车
(3)再输入3