/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
水木清华
2020-03-16
字符串排序
*/
#include <iostream>
#include <vector>
using namespace std;
string String_Sorting(string str)
{
    int len = str.size(); //获取字符串长度
    vector <char> vec; //用一个 char 型的向量存储按规则排序后的字符串中的字母字符
    //规则一:英文字母从 A 到 Z 排列,不区分大小写。
    //规则二:同一个英文字母的大小写同时存在时,按照输入顺序排列。
    for (int j = 0; j < 26; j++)
    {
        for (int i = 0; i < len; i++)
        {
            if ((str[i] - 'a' == j) || (str[i] - 'A' == j))
            {
                vec.push_back(str[i]); //将符合规则的字母字符先后写入向量
            }
        }
    }
    //规则三:非英文字母的其它字符保持原来的位置。
    for(int i = 0,k = 0;(i < len) && (k < vec.size()); i++)
    {
        if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
        {
            str[i] = vec[k++];
        }
    }
    return str; //返回按规则排序好后的字符串
}
//主函数
int main()
{
    string str;
    while (getline(cin, str))
    {
        cout << String_Sorting(str) << endl;
    }
    return 0;
}