题目描述
编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
输入
A Famous Saying: Much Ado About Nothing(2012/8).
输出
A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).
#include<bits/stdc++.h>
using namespace std;
struct node{
char c;
int tag;
}E[1005];
bool cmp(node a, node b){
char aa = tolower(a.c);
char bb = tolower(b.c);
if(aa != bb) return aa < bb;
else return a.tag < b.tag;
}
int main(){
string str;
while(getline(cin,str)){
int k=0;
for(int i=0;i<str.size();i++){
if(isalpha(str[i])){
E[k].c = str[i];
E[k].tag = i;
k++;
}
}
sort(E,E+k,cmp);
int u=0;
for(int i=0;i<str.size();i++){
if(isalpha(str[i])){
cout<<E[u].c;
u++;
}else cout<<str[i];
}
cout<<endl;
}
return 0;
}