给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
代码长度限制
16 KB
时间限制
150 ms
内存限制
64 MB
法一:
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
//遍历字符串的每个字符可以使用str[i]进行遍历
//scanf可以读取空格,使用getline(cin,string)读入n行string需要n+1次循环
int main() {
string str;
int g = 0, p = 0, t = 0, l = 0, sum = 0;
getline(cin, str);
for (int i = 0; i < str.size(); i++) {
if (str[i] == 'G' || str[i] == 'g') {
g++;
}
if (str[i] == 'P' || str[i] == 'p') {
p++;
}
if (str[i] == 'L' || str[i] == 'l') {
l++;
}
if (str[i] == 'T' || str[i] == 't') {
t++;
}
}
sum = g + p + l + t;
for (int i = 0; i < sum; i++) {
if (g > 0) {
printf("G");
g--;
}
if (p > 0) {
printf("P");
p--;
}
if (l > 0) {
printf("L");
l--;
}
if (t > 0) {
printf("T");
t--;
}
}
return 0;
}
法二:
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
int main() {
string g, p, t, l, str;
int sum = 0;
getline(cin, str);
for (int i = 0; i < str.size(); i++) {
if (str[i] == 'G' || str[i] == 'g') {
g += 'G';
sum++;
}
if (str[i] == 'P' || str[i] == 'p') {
p += 'P';
sum++;
}
if (str[i] == 'L' || str[i] == 'l') {
l += 'L';
sum++;
}
if (str[i] == 'T' || str[i] == 't') {
t += 'T';
sum++;
}
}
//注意判断索引是否越界
for (int i = 0; i < sum; i++) {
if (i<g.size()&&g[i] == 'G') {
printf("G");
}
if (i<p.size()&&p[i] == 'P') {
printf("P");
}
if (i<l.size()&&l[i] == 'L') {
printf("L");
}
if (i<t.size()&&t[i] == 'T') {
printf("T");
}
}
return 0;
}