问题描述
给定两个仅有英文字母构成的字符串s和t,把这两个字符串合并后排序。排序规则如下
1)不区分大小写按26个字母的字典顺序排序,即a和A在最前,其次是b和B,...,最后是z和Z
2)小写字母在大写字母的前面。
例如HELLO和hello合并并排序后的字符串为
eEhHllLLoO
输入
输入为两行,每行都是有大小写英文字母构成的字符串。每个字符串的长度不超过100。
输出
在单独的一行中输出合并排序后的字符串。
输入样列
HELLO
hello
输出样例
eEhHllLLoO
代码
#include<bits/stdc++.h>
using namespace std;
int A[26];//大写字母统计 出现次数 ,放在主函数外面的数组默认初始化为0
int a[26];//小写字母统计 出现次数
int main()
{ int i ,k;
string s ,t ;
cin >> s >> t;
for( i = 0 ; i < s.size() ; i++)
{
if( s[i] >='A' && s[i] <='Z')//大写字母统计统计
A[ s[i] - 'A'] ++;//利用ascii性质
else
if( s[i] >='a' && s[i] <='z')//小写字母统计
a[ s[i] - 'a']++;
}
for( i = 0 ; i < t.size() ; i++)
{
if( t[i] >='A' && t[i] <='Z')
A[ t[i] - 'A'] ++;
else
if( t[i] >='a' && t[i] <='z')
a[ t[i] - 'a']++;
}
for( i = 0 ; i < 26 ; i++)
{
if( a[i] >0)
{
for( k = 1 ; k <= a[i] ; k++)
printf("%c" , i+'a');
}
if( A[i] >0)
{
for( k = 1 ; k <= A[i] ; k++)
printf("%c" , i+'A');
}
}
puts("");
return 0;
}