1043. 输出PATest(20)

描述

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“PATestPATest....”这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按PATest的顺序打印,直到所有字符都被输出。

输入格式:

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

输出格式:

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

输入样例:

redlesPayBestPATTopTeePHPereatitAPPT

输出样例:

PATestPATestPTetPTePePee

思路:用数组按"PATest"的顺序记录字母个数,然后顺序输出字符,并将字符个数减1,个数为零不打印,全部为零退出。
C语言:

#include 
#include 
#define max_size 10001

void transform(int arr[], char ch);

int main(void)
{
    char *str = (char *)malloc(sizeof(char) * max_size);
    scanf("%s", str);
    int A[6] = {0};
    const char S[6] = {'P', 'A', 'T', 'e', 's', 't'};
    int i;
    for (i=0; str[i]; i++){
        transform(A, str[i]);
    }
//  for (i=0; i<6; i++){
//      printf("A[%d] = %d: ", i, A[i]);
//      printf("%c\n", S[i]);
//  }
    int flag = 1;
    while (flag == 1){
        flag = 0;
        for (i=0; i<6; i++){
            if (A[i] > 0){
                printf("%c", S[i]);
                A[i]--;
                flag = 1;
            }
        }
    }
    
    return 0;
}

void transform(int arr[], char ch)
{
    switch (ch){
        case 'P': arr[0]++; break;
        case 'A': arr[1]++; break;
        case 'T': arr[2]++; break;
        case 'e': arr[3]++; break;
        case 's': arr[4]++; break;
        case 't': arr[5]++; break;
    }
}

你可能感兴趣的:(1043. 输出PATest(20))