1043 输出PATest (20 分)

给定一个长度不超过 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++的练习。

转载于:https://www.cnblogs.com/TBhacker/p/11215952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值