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;
}