C++高手帮我写下这个程序的注释
#include<iostream.h>
#include<ctype.h>
using namespace std;
struct ca
{
char c;
ca *next;
};
void Input(ca *L)
{cout<<"输入一页文字(#标志结束): "<<endl;
while((L->c=getchar())!='#'){L->next=new ca;
L = L->next;
}
L->next=NULL;
}
void str(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<<"字符串"<<s<<" 出现"<<n<<" 次\n";
}
ca *Del(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 Sum_1(ca *L)
{
while(L->next)
{
cout<<L->c;
L=L->next;
}
cout<<endl;
}
void Sum_2(ca *L, int &p1, int &p2, int &p3, int &p4,int &p5,int &n)
{
n=p1=p2=p3=p4=p5=0;
for(;L->next;L=L->next,n++)
if(isalpha(L->c))
p1++;
else if(isdigit(L->c)) p2++;
else if(islower(L->c)) p4++;
else if(isupper(L->c)) p5++;
else if(L->c==' ')
p3++;
else if(L->c=='\n')
n--;
cout<<endl<<"全部字母数: "<<p1;
cout<<endl<<"其中大写字母个数为:"<<p5;
cout<<endl<<"小写字母个数为:"<<p4;
cout<<endl<<"数字个数: "<<p2;
cout<<endl<<"空格个数: "<<p3;
cout<<endl<<"文章总字数: "<<n<<endl;
}
int main()
{
ca *L = new ca;
int p1, p2, p3, p4,p5,n, c;
Input(L);
do
{
cout<<endl<<"0:退出"<<endl;
cout<<"1:统计中英文字母和空格数以及整篇文章总字数"<<endl;
cout<<"2:统计某一字符串在文章中出现次数"<<endl;
cout<<"3:删除某一子串"<<endl;
cin>>c;
switch (c)
{
case 1:
Sum_2(L, p1, p2, p3, p4,p5,n);break;
case 2:
str(L);break;
case 3:
Del(L);
case 4:
Sum_1(L);
}
}while (c);
cin.get();
}
补充:每条语句都写吧,到时候我会增加悬赏分的
追问:程序有那么一点小错误,就是不能正确分别统计大小写字母个数,帮我改改
答案:#include<iostream.h>
#include<ctype.h>
using namespace std;
struct ca//链表的节点结构体
{
char c;
ca *next;
};
//接收输入的字符
void Input(ca *L)
{
cout<<"输入一页文字(#标志结束): "<<endl;
while((L->c=getchar())!='#')//循环检测字符,如果为 #表示结束
{
L->next=new ca;//创建一个新节点,接收字符
L = L->next;//从新指向下一个节点
}
L->next=NULL;
}
//检测一个字符出现的次数
void str(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<<"字符串"<<s<<" 出现"<<n<<" 次\n";
}
//删除链表内的某个字符串
ca *Del(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 Sum_1(ca *L)//将链表内的数据输出一次
{
while(L->next)
{
cout<<L->c;
L=L->next;
}
cout<<endl;
}
//遍历链表
void Sum_2(ca *L, int &p1, int &p2, int &p3, int &p4,int &p5,int &n)
{
n=p1=p2=p3=p4=p5=0;
for(;L->next;L=L->next,n++)
if(isalpha(L->c))//判断是否为字母
p1++;
else if(isdigit(L->c))//是否为数字
p2++;
else if(islower(L->c))//是否为小写
p4++;
else if(isupper(L->c))//判断是否为大写
p5++;
else if(L->c==' ')//是否为空格
p3++;
else if(L->c=='\n')//是否为换行
n--;
cout<<endl<<"全部字母数: "<<p1;
cout<<endl<<"其中大写字母个数为:"<<p5
cout<<endl<<"小写字母个数为:"<<p4
cout<<endl<<"数字个数: "<<p2;
cout<<endl<<"空格个数: "<<p3;
cout<<endl<<"文章总字数: "<<n<<endl;
}
int main()
{
ca *L = new ca;
int p1, p2, p3, p4,p5,n, c;
//开始输入字符
Input(L);
do{
//接受命令参数
cout<<endl<<"0:退出"<<endl;cout<<"1:统计中英文字母和空格数以及整篇文章总字数"<<endl;cout<<"2:统计某一字符串在文章中出现次数"<<endl;cout<<"3:删除某一子串"<<endl;cin>>c;switch (c){case 1:Sum_2(L, p1, p2, p3, p4,p5,n)break; case 2:str(L);break;case 3:Del(L);break;case 4:Sum_1(L);break;}}while (c);
cin.get();
}
楼上正解!!!!以上内容参考 http://www.ljcollect.com/othersoft/soso.html
上一个:C++中的栈和堆是什么?
下一个:谁能给一张c++函数表格