我把这个简单的程序读成字符串“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;
}
}
}
答案 0 :(得分:9)
那是因为cin >> s
在第一个空格处停止。
换句话说,如果您输入1 4 2 3
,s
仅包含1
,而不是整行。
相反,请使用以下内容阅读整行:
std::getline(std::cin, s);
答案 1 :(得分: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( ));