Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目描述
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
思路分析
这道题并不难,我是用简单的计数解决的
将一个输入字符串转化成处理输入的每个字符,然后对每个P、A、T、e、s、t 分别计数,统计总数,再逐个按次序输出
值得一提的是,我犯了一个很傻的错误,我竟然使用了一个if(P--), P大于0的情况下,后面的自减根本不会执行,因为判断P为真,就直接跳过了后面的--,也就是说相当于 if(P)。
AC代码
#include<iostream>
using namespace std;
int P,A,T,e,s,t;
int main()
{
char c;
while(cin>>c)
{
switch(c)
{
case 'P': P++;break;
case 'A': A++;break;
case 'T': T++;break;
case 'e': e++;break;
case 's': s++;break;
case 't': t++;break;
}
}
int n=P+A+T+e+s+t;
while(n--)
{
if(P) cout<<'P',P--;
if(A) cout<<'A',A--;
if(T) cout<<'T',T--;
if(e) cout<<'e',e--;
if(s) cout<<'s',s--;
if(t) cout<<'t',t--;
}
return 0;
}
总结
细节决定成败,基础还是不扎实呀
生命不息,码不停题,加油吧,少年!