在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在学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; }
写完之后看了参考答案…看得心都有点凉,原来可以直接cin>>string…… 不过还是学到一些东西哈~ 1.cin会自动忽略空格和回车,cin.get()方法就不会. 2.发现了“++”运算符的特殊用处. 3.没有特地为”第一次”写语句(变量初始化不算的话). |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论