1043 输出PATest

题目链接:1043 输出PATest

思路:遍历整个字符串,遇到’P’,‘A’,‘T’,‘e’,‘s’,'t’字符就分别将其存储到一个计数器中(已想到)。
难点在于如何按照PATest的顺序输出。
一开始的想法是遍历字符串,遇到相对应的字符就输出,相应的计数器- -,即:

if (str[i] == 'P') cout << 'P', P--;
else if (str[i] == 'A') cout << 'A', A--;
else if (str[i] == 'T') cout << 'T', T--;
else if (str[i] == 'e') cout << 'e', e--;
else if (str[i] == 's') cout << 's', s--;
else if (str[i] == 't') cout << 't', t--;

但这样仍无法实现按照题干顺序输出,在遍历过程中如果没有暂时遇到P而是遇到s就直接输出了,×。

修改思路
设计一个循环,只要各个计数器不是全部为0就继续循环,如果某个字符的计数器不为0就输出这个字符并将这个字符的计数器 - -。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    char str[10001];
   
    int P = 0, A = 0, T = 0, e = 0, s = 0, t = 0;
    fgets(str, sizeof(str), stdin);

    for (int j = 0; j < strlen(str); ++j){
	    
         switch(str[j]){
	      	case 'P': P++;break;
	      	case 'A': A++;break;
	      	case 'T': T++;break;
	      	case 'e': e++;break;
	      	case 's': s++;break;
	      	case 't': t++;break;
		  }

    }
    do{	     	 
		if(P != 0) putchar('P'), P--;
		if(A != 0) putchar('A'), A--;
		if(T != 0) putchar('T'), T--;
		if(e != 0) putchar('e'), e--;
		if(s != 0) putchar('s'), s--;
		if(t != 0) putchar('t'), t--;
		
	}while(P != 0 || A != 0 || T != 0 || e != 0 || s != 0 || t != 0);
     
    return 0;
}

值得一提的是,也可以采用while循环来做。
while(1) { if (P == 0 && A == 0 && T == 0 && e == 0 && s == 0 && t == 0) break;
在while (1)中添加一个break出口即可退出循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值