L1-023 输出GPLT (20 分)
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
#include<stdio.h>
#include<string.h>
int main()
{
char str[10010]; //储存输入的字符串内存空间
int g=0,p=0,l=0,t=0; //这四个变量分别用来计算字符串中出现的次数
int i,j; //用于循环和数组下标
int n; //得到所输入的字符串长度
gets(str); //提供输入功能
n = strlen(str); //得到str字符串的长度并赋值给n
for(i=0;i<n;i++) //从第一个字母开始一一寻找有没有g,G,t,T,l,L,p,P这些字母
{ //若存在,则会在for循环都算好其出现的次数,因为每对应依次都会+1
if(str[i]=='g' || str[i]=='G')
g++;
else if(str[i]=='p' || str[i]=='P')
p++;
else if(str[i]=='l' || str[i]=='L')
l++;
else if(str[i]=='t' || str[i]=='T')
t++;
}
while(n) //然后之后就是输出环节,每对应一个字母就将其输出,并减1
{ //直到它们都恢复为了初始值0时,无需打印,则赋n=0,判断为假结束循环
if(g!=0)
{ printf("G"); g--; }
if(p!=0)
{ printf("P"); p--; }
if(l!=0)
{ printf("L"); l--; }
if(t!=0)
{ printf("T"); t--; }
if(g==0 && p==0 && l==0 && t==0)
n=0;
}
printf("\n");
return 0;
}