2

この単純なプログラムを「1311910」のような文字列で読み取らせました。文字列を分割して並べ替えます。しかし、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 に答える