编写一个程序,将输入字符串中的字符按如下规则排序。
规则 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<vector>
#include<string>
#include<cctype>
#include<map>
#include<algorithm>
using namespace std;
typedef struct node{
int s;
int pos;
}node;
int character_check(char c)
{
if(isupper(c))
return c- 'A';
else if(islower(c))
return c -'a';
else
return -1;
}
bool comp(node a, node b)
{
if(a.s != b.s)
return a.s < b.s;
else
return a.pos < b.pos;
}
int main()
{
string str;
getline(cin,str);
vector<node> vec;
for(int i = 0; i<str.size();i++)
{
int res = character_check(str[i]);
if (res<0)
continue;
node nd;
nd.s = res;
nd.pos = i;
vec.push_back(nd);
}
sort(vec.begin(), vec.end(),comp);
auto it = vec.begin();
for(int i = 0; i<str.size();i++)
{
int res = character_check(str[i]);
if (res<0)
{
cout<<str[i];
}
else
{
cout<<str[it->pos];
if(it != vec.end())
it++;
}
}
cout<<endl;
return 0;
}
牛客网上提交结果为:
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为0.00%
用例:
a-&RR@pwojyuD$%&ukmg%NVnS%nh(pF$t!!drI*QdsfHBDYr!rp-$a~%@DxI^k$S-s@GN@uV#D*l$JVLJ&Kw(&Mrv^x%wkZ#(-!ZhMqZ)D%ZhnXA+C&%VoHLSpn!(%O-)$VOI-!)l-H~RFR##+jwo^biOPbB$hh&FG@P@W^*+nKCebJ%PC(Q$pd^%Kp~!J*%&@!ELBYMJjJCDEJw(!!(nG#Py%thZL(szC(*o&xfY&n~-nDRZ^)$!~ZuI*RG%+BMCsaHs)lwgH+i$oByguIv%odmN%pxXJa%OA#%#+(bzEd(Ox^Z#&It
对应输出应该为:
a-&aA@aaABbbB$%&bBBB%bCCC%CC(CD$d!!dDD*DDdDDddeE!EE-$F~%@fFF^f$g-G@GG@Gg#g*h$HhhH&Hh(&hhH^H%III#(-!iIiII)j%JJjJJ+J&%jJJJkkK!(%k-)$KKl-!)L-L~lLL##+lmM^MMMmNn$nN&nn@n@n^*+nnNooO%Oo(O$oo^%oO~!O*%&@!ppppPPPppPpQq(!!(QR#Rr%rrrR(RRR(*S&sSs&S~-ssst^)$!~ttu*uu%+uuVVVvV)Vvww+w$wWwwxxX%xxXx%yYYyY%yZ#%#+(ZZZZ(zZ^Z#&zZ
你的输出为:
空.请检查一下你的代码,有没有循环输入处理多个case.点击查看如何处理多个case