#include <iostream>
#include <string.h>
//#include <map>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const pair<int, char>&P1, const pair<int, char>&P2)
{
if(P1.second==P2.second)
{
return P1.first<P2.first;//不知道return p1.second<=p2.second为啥不行
}
return P1.second < P2.second;
}
int main()
{
string str;
//string temp;
while (cin>>str)
{
vector<pair<int,char>>v;
//map<int,char>m;
for(int i = 0;i<str.length();i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
pair<int,char>temp;
char ch = str[i];
temp.first=i;//位置
temp.second=tolower(ch);
//m[i]=tolower(str[i]);
v.push_back(temp);
}
}
sort(v.begin(),v.end(),cmp);//把出现的是字母的位置排序一手
int j = 0;
for(int i = 0;i <str.length();i++)
{
//输出排序后的字母或者原字符
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
cout<<str[v[j].first];
j++;
continue;
}
cout<<str[i];
}
cout<<endl;
}
return 0;
}然后突然想起来存的又不是map换个位置可以直接排的
#include <iostream>
#include <string.h>
//#include <map>
#include <vector>
#include <algorithm>
using namespace std;
/*
bool cmp(const pair<int, char>&P1, const pair<int, char>&P2)
{
if(P1.second==P2.second)
{
return P1.first<P2.first;//不知道return p1.second<=p2.second为啥不行
}
return P1.second < P2.second;
}
*/
int main()
{
string str;
//string temp;
while (cin>>str)
{
vector<pair<char,int>>v;
//map<int,char>m;
for(int i = 0;i<str.length();i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
pair<char,int>temp;
char ch = str[i];
temp.second=i;
temp.first=tolower(ch);
//m[i]=tolower(str[i]);
v.push_back(temp);
}
}
sort(v.begin(),v.end());
int j = 0;
for(int i = 0;i <str.length();i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
cout<<str[v[j].second];
j++;
continue;
}
cout<<str[i];
}
cout<<endl;
}
return 0;
}


京公网安备 11010502036488号