2

我把这个简单的程序读入了一个像“13 11 9 10”这样的字符串。我想拆分字符串然后对它们进行排序。但是 sort() 似乎不起作用,有什么帮助吗?输入: 13 11 9 10 ,输出: 13 11 9 10 谢谢!

#include <string>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

vector<int> split(string s)
{
    istringstream iss(s);
    vector<int> result;

    do{
        string sub;
        iss>>sub;
        if(sub!="")
            result.push_back((int)atoi(sub.c_str()));
    }while(iss);

    return result;
}
int main(void)
{   
    string s;
    while(cin>>s)
    {
        vector<int> vec;
        vec=split(s);
        sort(vec.begin(), vec.end());
        for (int i = 0; i < vec.size(); ++i)
        {
            cout<<vec[i]<<endl;
        }
    }
}
4

2 回答 2

9

那是因为cin >> s停在第一个空白处。

换句话说,如果您键入1 4 2 3,仅s包含1,而不是整行。

相反,请使用以下内容阅读整行:

std::getline(std::cin, s);
于 2012-07-18T07:04:44.950 回答
0

您的主要代码部分不正确,cin 已经将数据拆分为多个部分,使用带有缓冲区的 cin.getline 或 Cicida 上面的建议,我的工作代码如下所示:

string s;
char buffer[ 256 ];
do
{
    cin.getline( buffer, 255 );
    s.assign( buffer );
    vector<int> vec;
    vec=split(s);
    sort(vec.begin(), vec.end());
    for (int i = 0; i < vec.size(); ++i)
    {
        cout<<vec[i]<<endl;
    }
}while( !s.empty( ));
于 2012-07-18T07:39:50.617 回答