字符串排序
编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。
规则 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;
bool cmp(char s1, char s2) {
if (s1 >= 'A'&&s1 <= 'Z')s1 += 32;
if (s2 >= 'A'&&s2 <= 'Z')s2 += 32;
return s1 < s2;
}
bool isWord(char s) {
if (s >= 'a'&&s <= 'z' || (s >= 'A'&&s <= 'Z'))return true;
return false;
}
int main() {
string s;
while (getline(cin,s))
{
string t;
int l = s.size();
for (int i = 0; i < l; i++)
if (isWord(s[i]))
{
t += s[i];
}
stable_sort(t.begin(), t.end(), cmp);
for (int i = 0; i < l; i++)
if (!isWord(s[i]))
t.insert(t.begin() + i, s[i]);
cout << t << endl;
}
}