前言:本期是关于输出GPLT的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗?
题目:
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
代码实现:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[10001]={0};
int str[4]={0};
gets(arr);
int len=strlen(arr);
int i = 0;
for(i=0;i<len;i++)
{
if(arr[i]=='G' || arr[i]=='g')
{
str[0]++;
}
else if(arr[i]=='P' || arr[i]=='p')
{
str[1]++;
}
else if(arr[i]=='L' || arr[i]=='l')
{
str[2]++;
}
else if(arr[i]=='T' || arr[i]=='t')
{
str[3]++;
}
}
while(str[0]+str[1]+str[2]+str[3])
{
if(str[0]>0)
{
printf("G");
str[0]--;
}
if(str[1]>0)
{
printf("P");
str[1]--;
}
if(str[2]>0)
{
printf("L");
str[2]--;
}
if(str[3]>0)
{
printf("T");
str[3]--;
}
}
return 0;
}
大致思路:
1. 将字符串中的GPLT四种字符的个数统计
2. 只有四种字符中有任意一种没有打印完,那就继续打印,循环继续
每打印一个字符,此字符的个数减少一个,逼近结束条件
代码解读:
part 1:统计四种字符的个数
int len=strlen(arr);
int i = 0;
for(i=0;i<len;i++)
{
if(arr[i]=='G' || arr[i]=='g')
{
str[0]++;
}
else if(arr[i]=='P' || arr[i]=='p')
{
str[1]++;
}
else if(arr[i]=='L' || arr[i]=='l')
{
str[2]++;
}
else if(arr[i]=='T' || arr[i]=='t')
{
str[3]++;
}
}
strlen函数:求字符串长度
len:字符串长度
题目不区分大小写
str[0]:记录G的个数
str[1]:记录P的个数
str[2]:记录L的个数
str[3]:记录T的个数
part 2:打印四种字符
while(str[0]+str[1]+str[2]+str[3])
{
if(str[0]>0)
{
printf("G");
str[0]--;
}
if(str[1]>0)
{
printf("P");
str[1]--;
}
if(str[2]>0)
{
printf("L");
str[2]--;
}
if(str[3]>0)
{
printf("T");
str[3]--;
}
}
只要四种字符有任意一种还未打印完,循环就继续
一种字符每打印一次,个数减少一个