L1-023 输出GPLT (20 分)
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
先说下我的想法哈:
这个题不难,根据题意,首先就是想到了统计字母数量
然后根据题目所说的方式来输出就行了;
其实我一开始想的一种方法是统计一下数量,然后按规定输出就可以了;
但是呢,我在想有没有更加明了的方法;
于是就想到了stack的方法;
那么久更简单了,直接上代码;
大家看下:
(有问题大家可以私信我,也可以直接在评论区发表评论哦!)
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<char> G;
stack<char> P;
stack<char> L;
stack<char> T;
string str;
getline(cin,str);
for(int i=0;i<str.length();i++){
if(str.at(i)=='G'||str.at(i)=='g'){
G.push('G');
}
if(str.at(i)=='P'||str.at(i)=='p'){
P.push('P');
}
if(str.at(i)=='L'||str.at(i)=='l'){
L.push('L');
}
if(str.at(i)=='T'||str.at(i)=='t'){
T.push('T');
}
}
while(1){
int ss=4;
if(G.size()!=0){
cout<<G.top();
G.pop();
}else ss--;
if(P.size()!=0){
cout<<P.top();
P.pop();
}else ss--;
if(L.size()!=0){
cout<<L.top();
L.pop();
}else ss--;
if(T.size()!=0){
cout<<T.top();
T.pop();
}else ss--;
if(ss==0){
break;
}
}
}