#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号