PAT(乙级)2019年冬季考试 7-3 String复读机 (20分)

7-3 String复读机 (20分)
 

给定一个长度不超过 1 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 String 的顺序打印,直到所有字符都被输出。例如 gnirtSSs 要调整成 StringS 输出,其中 s 是多余字符被忽略。

输入格式:

输入在一行中给出一个长度不超过 1 的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

sTRidlinSayBingStrropriiSHSiRiagIgtSSr
 

输出样例:

StringStringSrigSriSiSii


代码讲解:利用hash将各个字母个数求出来,挨个输出,直到个数为0为止。。。

 1 #include<stdio.h>
 2 int main()
 3 {
 4     char a[128]={0},c,s[10001];
 5     int i;
 6     gets(s);
 7     for(i=0;s[i]!='\0';i++)
 8     {
 9         a[s[i]]++;
10     }    
11     while(a['S']!=0||a['t']!=0||a['r']!=0||a['i']!=0||a['n']!=0||a['g']!=0)
12     {
13         if(a['S']!=0)
14         {
15         printf("S");
16         a['S']--;
17         }     
18         if(a['t']!=0)
19         {
20         printf("t");
21         a['t']--;
22         }    
23         if(a['r']!=0)
24         {
25         printf("r");
26         a['r']--;
27         }    
28         if(a['i']!=0)
29         {
30         printf("i");
31         a['i']--;
32         }
33         if(a['n']!=0)
34         {
35         printf("n");
36         a['n']--;
37         }
38         if(a['g']!=0)
39         {
40         printf("g");
41         a['g']--;
42         }    
43     }
44     printf("\n");
45     return 0;
46 }

 

 
posted @ 2020-11-25 22:29  罪梦者  阅读(126)  评论(0)    收藏  举报