题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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).
输入描述:
输出描述:
示例1
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
#include <iostream>
#include <cmath>
#include <string.h>
#include <stdio.h>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::swap;
int changeA_2_a(char c){
if(c>='A'&&c<='Z')
c+=32;
return c;
}
int is_letter(char c){
if(c>='a'&&c<='z')
return 1;
else if(c>='A'&&c<='Z')
return 1;
else
return 0;
}
void solution(char *res){
int len=strlen(res);
int j2;
for(int i=0;i<len;i++) {
for(int j=len-1;j>=i;j--){
if(!is_letter(res[j])){
continue;
}
j2=j-1;
while(!is_letter(res[j2])){
j2--;
if(j2<i)
break;
}
if (changeA_2_a(res[j])<changeA_2_a(res[j2]) && j2>=i)
swap(res[j],res[j2]);
}
}
}
int main()
{
char res[1000];
while(cin>>res){
solution(res);
cout<<res<<endl;
}
return 0;
}