我编写了一个代码,用它们的大小对一组字符串进行排序。如果字符串的大小相等,则必须保持集合的原始顺序。
当我输入 - > Top Coder comp Wedn在午夜
我的代码给我的输出是 - >午夜Coder Wedn来自午夜
但我想要输出 - >午夜Coder comp Wedn Top at
while(cin>>k){
if(k=="m")
break;
w.push_back(k);
}
cout<<w.size()<<"\n";
for(i=0;i<w.size();i++)
{
for(j=i+1;j<w.size();j++)
{
if(w[i].size()>1&&w[i].size()<50&&w[j].size()>1&&w[j].size()<50)
{
if(w[i].size()<w[j].size()&&i!=j)
{
string temp;
temp=w[i];
w[i]=w[j];
w[j]=temp;
}
else if(w[i].size()==w[j].size()&&i!=j)
{
}
}
}
}
for(i=0;i<w.size();i++)
{
cout<< w[i]<<" ";
}
}
答案 0 :(得分:3)
使用https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
在C ++中更简单的方法#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
using namespace std;
int main() {
// Input strings from cin into a vector
vector<string> v(istream_iterator<string>(cin), {});
// sort vector based on lengths and preserve ordering
stable_sort(v.begin(), v.end(), [](const string & a, const string & b) -> bool {
return a.length() > b.length();
});
// print contents of vector to cout
copy(v.begin(), v.end(), ostream_iterator<string>(cout, " "));
return 0;
}
输入
Top Coder comp Wedn at midnight
输出
midnight Coder comp Wedn Top at