ZOJ Problem Set - 2478 Encoding

Encoding

Time Limit: 2 Seconds       Memory Limit: 65536 KB

Given a string containing only 'A' - 'Z', we could encode it using the following method:

1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.

2. If the length of the sub-string is 1, '1' should be ignored.


Input

The first line contains an integer N (1 <= N <= 100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only 'A' - 'Z' and the length is less than 100.


Output

For each test case, output the encoded string in a line.


Sample Input

2
ABC
ABBCCC


Sample Output

ABC
A2B3C



Author:  ZHANG, Zheng

Source: Zhejiang Provincial Programming Contest 2005




分析:

字符串的简单模拟题,读懂题意。

题意:

输入一个字符串,

(1)将子串中k个连续的相同字符表示成”kx“,x是子串中的字符;

(2)若子串的长度是1,那么”1“应该忽略。

要注意的是字符串可能出现AABBCCAACBBAD这种形式,即A是断开的,这时候应输出2A2B2C2AC2BAD



AC代码:

#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
char c;
string s;
int main()
{
    int n,i,j,num;
    scanf("%d",&n);
    while(n--)
    {
       cin>>s;
       int L=s.size();
       c=s[0];
       num=0;
       for(i=0;i<L;i++)
       {
           if(c==s[i])
           {
               num++;
               if(i==L-1)//最后一个要直接输出,因为for循环已经终止了
               {
                  if(num==1)
                  cout<<c;
                  else
                  cout<<num<<c;
               }
           }
           else
           {
               if(num==1)
               cout<<c;
               else
               cout<<num<<c;
               c=s[i];
               num=1;//注意是从1开始计数,因为已经有一个是不同的
               if(i==L-1)//最后一个要直接输出,因为for循环已经终止了
               {
                  if(num==1)
                  cout<<c;
                  else
                  cout<<num<<c;
               }
           }
       }
       printf("\n");
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值