尝试计算不同的字符串,什么是错误的

时间:2013-07-11 09:41:41

标签: c++

这种方法有什么不对

#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

1 个答案:

答案 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;
}

当然,使用标准库算法有更好的方法,但我认为这是一个简单的教育练习。

另请注意我写的&&问题的方法很重要!反过来,你试着将最后一个字符串与最后的字符串进行比较。