L1-023 输出GPLT

题目描述

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

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

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

输入样例:

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

输出样例:

GPLTGPLTGLTGLGLL

模拟

这段代码的目的是从输入的字符串中提取字符’G’, ‘P’, ‘L’, ‘T’(不区分大小写),并按照"G", “P”, “L”, "T"的顺序重复输出,直到所有这些字符都被输出完毕。下面是对代码的详细注释:

#include<iostream>
#include<string>
using namespace std;

int n[5]; // 定义一个数组n,用于存储'G', 'P', 'L', 'T'四个字符的出现次数。数组大小为5,实际使用中只用到前4个元素。

int main()
{
    string s; // 定义一个字符串s,用于存储输入的字符串。
    cin>>s; // 从标准输入读取一个字符串到s。
    // 遍历字符串s中的每个字符
    for(int i=0;i<s.size();i++)
    {
        // 如果当前字符是'G'或'g',则增加n[0]的值,即'G'的计数。
        if(s[i]=='G'||s[i]=='g') n[0]++;
        // 如果当前字符是'P'或'p',则增加n[1]的值,即'P'的计数。
        if(s[i]=='P'||s[i]=='p') n[1]++;
        // 如果当前字符是'L'或'l',则增加n[2]的值,即'L'的计数。
        if(s[i]=='L'||s[i]=='l') n[2]++;
        // 如果当前字符是'T'或't',则增加n[3]的值,即'T'的计数。
        if(s[i]=='T'||s[i]=='t') n[3]++;
    }
    // 当数组n中任一元素的值大于0时,继续循环。
    // 这意味着只要'G', 'P', 'L', 'T'中的任何一个字符还有剩余,就继续输出。
    while(n[0]||n[1]||n[2]||n[3])
    {
        // 如果'G'的计数大于0,输出'G',并将'G'的计数减1。
        if(n[0]>0)
        {
            cout<<"G";
            n[0]--;
        }
        // 如果'P'的计数大于0,输出'P',并将'P'的计数减1。
        if(n[1]>0)
        {
            cout<<"P";
            n[1]--;
        }
        // 如果'L'的计数大于0,输出'L',并将'L'的计数减1。
        if(n[2]>0)
        {
            cout<<"L";
            n[2]--;
        }
        // 如果'T'的计数大于0,输出'T',并将'T'的计数减1。
        if(n[3]>0)
        {
            cout<<"T";
            n[3]--;
        }
    }
    return 0; // 程序正常结束。
}

这段代码通过一个简单的计数逻辑和循环结构实现了题目的要求,即不断按照"G", “P”, “L”, "T"的顺序输出字符,直到所有指定的字符都被输出完毕。

03-19 04:57