1)每个包含k个相同字符的子串要表示成”kX”,其中X是由唯一字符组成的子串。(2)如果某个子串的长度为1,则1忽略不写。
输入:第1行输入一个整数N(1<=N<=100) ,代表要处理的字符串的个数。接下来的N行就分别输入一个只包含’A’-’Z’的字符串,每个字符串的长度小于10000.
输出:对于每个字符串,在单独的一行上输出该字符串编码转换后的内容。
核心是如何判断出新的子串出现,以及计算每个子串中字符的个数。
输入: 输出
2
MMKXXXXXXFFCA 2MK6X2FCA
输入:第1行输入一个整数N(1<=N<=100) ,代表要处理的字符串的个数。接下来的N行就分别输入一个只包含’A’-’Z’的字符串,每个字符串的长度小于10000.
输出:对于每个字符串,在单独的一行上输出该字符串编码转换后的内容。
核心是如何判断出新的子串出现,以及计算每个子串中字符的个数。
输入: 输出
2
MMKXXXXXXFFCA 2MK6X2FCA
ABBPPPPPTT A2B5P2T
本例属于边计算边输出,所以时间对于输入输出的较大,可以将cin和cout换成scanf和printf。
#include<iostream>
#include<string>
using namespace std;
int main(){
string s,t;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
int c=0;
t=s[0];
int temp=0;
for(int j=0;j<s.size();j++){
if(s[j]==t[0]){
temp++;
//如果已是最后一个,直接输出
if(j==s.size()-1){
if(temp==1)cout<<t[0];
else cout<<temp<<t[0];
}
}
else{
if(temp==1)cout<<t[0];
else cout<<temp<<t[0];
t[0]=s[j];
temp=1;
//如果已是最后一个,直接输出
if(j==s.size()-1){
if(temp==1)cout<<t[0];
else cout<<temp<<t[0];
}
}
}
cout<<endl;
s="";
}
return 0;
}