题目描述
编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。
规则 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 <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
bool letter(char a){
if(a >= 'a' && a <= 'z')
return true;
if(a >= 'A' && a <= 'Z')
return true;
return false;
}
char change(char a){
if(a >= 'A' && a <= 'Z')
a = a - 'A' + 'a';
return a;
}
void sorts(char s[]){
int now;
for(int i = strlen(s) - 1; i > 0; i --){
for(int j = 0; j < i; j ++){
if(!letter(s[j])){
continue;
}
now = j + 1;
while(!letter(s[now])){
now ++;
if(now > i)
break;
}
if(change(s[j]) > change(s[now]) && now <= i){
swap(s[j], s[now]);
}
}
}
}
int main()
{
char s[1000];
while(gets(s)){
sorts(s);
puts(s);
}
return 0;
}