文章目录
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"的顺序输出字符,直到所有指定的字符都被输出完毕。