这种方法有什么不对
#include<algorithm>
#include<iomanip>
#include<ios>
#include<iostream>
#include<string>
#include<vector>
using std::cin;using std::cout;
using std::endl;
using std::setprecision;
using std::string;
using std::streamsize;
using std::sort;
using std::vector;
int main(){
string zz;
typedef vector<string> vs;
vs input,distinct;vector<int> count;
cout<<"Enter the words";
while(cin>>zz){
input.push_back(zz);
}
if(input.size()==0){
cout<<"Enter atleast a single word";
return 1;
}
int i=0,j=0;
sort(input.begin(),input.end());
while(i!=input.size()){
int count2=0;
for(j=i;j<input.size();j++)
{
if(input[j]==input[j+1])
{
count2++;
}else{
break;
}
}
distinct.push_back(input[i]);
count.push_back(count2);
i+=count2;continue;
i++;
}
for(i=0;i<distinct.size();i++)
{
cout<<distinct[i]<<"\t time"<<count[i]<<"\n";
}
return 0;
}
我使用的是ubuntu 12.10 gcc4.7
它的任务是计算不同数量的给定输入并显示它。 程序要求输入并且即使在文件结束之后也没有停止输入,即ctrl + d
答案 0 :(得分:3)
问题不在于您的读取循环。它陷入无限循环
while(i!=input.size()){
仔细考虑您的结束条件以及更改i
的行:
i+=count2;continue;
i++;
i++
会被执行吗? i
完全等于input.size()
?如果是重复的单词?如果不?
好的,想一想?我用这个替换了那个循环。评论应该解释:
while(i < input.size())
{
// Store current string
distinct.push_back(input[i]);
// Skip same strings
int j = i;
while ( j < input.size() // Don't go too far
&& input[i] == input[j] ) // And only while duplicates
++j;
// Store a count of how many we skipped
count.push_back(j-i);
// Move to the next *non-identical* string
i=j;
}
当然,使用标准库算法有更好的方法,但我认为这是一个简单的教育练习。
另请注意我写的&&
问题的方法很重要!反过来,你试着将最后一个字符串与最后的字符串进行比较。