题目描述

编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。
规则 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;
}