给定一个长度不超过 1 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过 1 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
1 #include<stdio.h> 2 3 int main(){ 4 char str[10002]; 5 gets(str); 6 int num[7]={0}; 7 int i; 8 for(i=0;str[i]!='\0';i++){ 9 switch(str[i]){ 10 case 'P' :num[1]++;break; 11 case 'A' :num[2]++;break; 12 case 'T' :num[3]++;break; 13 case 'e' :num[4]++;break; 14 case 's' :num[5]++;break; 15 case 't' :num[6]++;break; 16 } 17 } 18 int kong=0;//字母输入完的个数 19 for (i = 1; i < 7; i++) { 20 if(num[i]==0)kong++; 21 } 22 while(kong!=6){ 23 if(num[1]!=0){ 24 printf("P"); 25 num[1]--; 26 if(num[1]==0)kong++; 27 } 28 if(num[2]!=0){ 29 printf("A"); 30 num[2]--; 31 if(num[2]==0)kong++; 32 } if(num[3]!=0){ 33 printf("T"); 34 num[3]--; 35 if(num[3]==0)kong++; 36 } if(num[4]!=0){ 37 printf("e"); 38 num[4]--; 39 if(num[4]==0)kong++; 40 } if(num[5]!=0){ 41 printf("s"); 42 num[5]--; 43 if(num[5]==0)kong++; 44 } if(num[6]!=0){ 45 printf("t"); 46 num[6]--; 47 if(num[6]==0)kong++; 48 } 49 } 50 }
看到别人简洁的C++版本,如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int mapp[128] ={0},c; while((c=cin.get())!=EOF) mapp[c]++; while(mapp['P']>0||mapp['A']>0||mapp['T']>0||mapp['e']>0||mapp['s']>0||mapp['t']>0){ if(mapp['P']-->0) cout<<'P'; if(mapp['A']-->0) cout<<'A'; if(mapp['T']-->0) cout<<'T'; if(mapp['e']-->0) cout<<'e'; if(mapp['s']-->0) cout<<'s'; if(mapp['t']-->0) cout<<'t'; } return 0; }
决定以后加强C++的练习。