C++学习笔记(二)----关于cin和++
在学C++ Primer这本书,看到第六章,决定选个习题来做做,习题6.12--
编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词.程序应该找出满足以下条件的单词的输入位置:该单词的后面紧跟着再次出现自己本身.跟踪重复次数最多的单词及其重复次数.输出重复次数的最大值,若没有单词重复则输出说明信息.例如,如果输入是:
how,now now now brown cow cow
则输出应说明“now”这个单词出现了三次.
为简单起见,我使用了长度为10的字符数组,只是这样就对单词长度有了限制.我是这样做的.
char a,b[10],c[10],d[10];
int i=0,j=0,s=0,t=0,k=0;
while(cin.get(a))//cin会自动忽略空格和回车,所以这里使用cin.get()方法
{
if(a!=','&&a!=' '&&a!='\n')
b[i++]=a;//输入下一个单词
else if(i>0)//遇到逗号停下比较,并且忽略多余的逗号
{
if(i!=j)//两个单词长度不同
{
j=0;
while(j<i)
c[j]=b[j++];//将原来c中的单词替换成刚输入的新单词
s=0;//当前重复次数置0
}
else
{
int m=0;
while(m<i)
{
if(b[m]!=c[m++])//两个单词不相同
{
m=0;
while(m<i)
c[m]=b[m++];//将原来c中的单词替换成刚输入的新单词,j不变
s=0;//当前重复次数置0
break;//跳出未执行完的while循环
}
else if(m==i)//两个单词相同,体现了"++"的好处.
{
s++;
if(s>t)
{
k=0;
while(k<i)
d[k]=c[k++];//新的重复次数最多的单词
t=s;//连续出现的次数-1
}
}
}
}
i=0;
}
if(a=='\n')
break;//退出循环
}
i=0;
if(t>0)
{
cout<<"单词";
while(i<k)
cout<<d[i++];
cout<<"连续出现了"<<t+1<<"次."<<endl;
}
else
{
cout<<"没有任何单词连续出现超过1次."<<endl;
}
int i=0,j=0,s=0,t=0,k=0;
while(cin.get(a))//cin会自动忽略空格和回车,所以这里使用cin.get()方法
{
if(a!=','&&a!=' '&&a!='\n')
b[i++]=a;//输入下一个单词
else if(i>0)//遇到逗号停下比较,并且忽略多余的逗号
{
if(i!=j)//两个单词长度不同
{
j=0;
while(j<i)
c[j]=b[j++];//将原来c中的单词替换成刚输入的新单词
s=0;//当前重复次数置0
}
else
{
int m=0;
while(m<i)
{
if(b[m]!=c[m++])//两个单词不相同
{
m=0;
while(m<i)
c[m]=b[m++];//将原来c中的单词替换成刚输入的新单词,j不变
s=0;//当前重复次数置0
break;//跳出未执行完的while循环
}
else if(m==i)//两个单词相同,体现了"++"的好处.
{
s++;
if(s>t)
{
k=0;
while(k<i)
d[k]=c[k++];//新的重复次数最多的单词
t=s;//连续出现的次数-1
}
}
}
}
i=0;
}
if(a=='\n')
break;//退出循环
}
i=0;
if(t>0)
{
cout<<"单词";
while(i<k)
cout<<d[i++];
cout<<"连续出现了"<<t+1<<"次."<<endl;
}
else
{
cout<<"没有任何单词连续出现超过1次."<<endl;
}
写完之后看了参考答案…看得心都有点凉,原来可以直接cin>>string……
不过还是学到一些东西哈~
1.cin会自动忽略空格和回车,cin.get()方法就不会.
2.发现了“++”运算符的特殊用处.
3.没有特地为”第一次”写语句(变量初始化不算的话).