#include <bits/stdc++.h>
using namespace std;
int main (){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
vector <int> a;
string str;
cin>>str;
for(int i = 0; i < str.size(); i++){
if(str[i]!='+')
{
int c = str[i]-'0';
a.push_back(c);
}
}
sort(a.begin(), a.end());
cout<<a.at(0);
for(int j = 1; j < str.size(); j++){
cout<<'+'<<a.at(j);
}
return 0;
}
答案 0 :(得分:1)
您需要将循环的停止条件更改为停止向量的大小而不是字符串。因此,将上一个循环更改为以下
for(int j = 1; j < a.size(); j++){
cout<<'+'<<a.at(j);
}
此外,如果您想以您指定的格式打印所有值,您需要执行以下操作
assert(!a.empty());
for(int j = 0; j < a.size() - 1; j++){
cout << a.at(j) << '+';
}
cout << a.back() << endl;
关于您的实施的最后一件事。如果总是给你一个格式为“a + b + c + d”的字符串,你不需要一个向量来反转序列和打印。您可以简单地执行以下操作
std::reverse(str.begin(), str.end()); // #include <algorithm>
然后字符串将具有您想要的序列。如果您不想这样做并且需要另一个容器,那么</ p>
// #include <iterator> and #include <algorithm>
string other_string;
std::copy(str.crbegin(), str.crend(), std::back_inserter(other_string));
^这会将字符串以相反的顺序复制到另一个字符串对象。