分析题目: 直接用输入输出解析这道题。
输入:GGGGGGGGGGGGGHHHHHHGGGGGGGG
输出:13G6H8G
输入:BBBBBHHHHHHHHHQH
输出:5B9HQH
相当于是统计连续字符,把计数打在字符前(1不打印)
思路: 比较 i 下标和 i+1 下标的ascii码值,相同计数加一,利用循环继续比较 i 和 i+1 下标的ascii值,直到不同,把计数和 i 下标的字符存到字符数组中。
注意:1 不存,计数number的变化。
记得点赞哦O_O
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
while(n--){
string s1;
char s2[10000]; //存要打印的结果
cin >> s1;
int r = 0;
int len1 = s1.size();
for(int i = 0; i < len1; i++, r++){
int num = 1; //记录相同的个数
while(s1[i] == s1[i+1]){ //相同加一,检索下一位
num++;
i++;
}
if(num == 1){
s2[r] = s1[i]; //个数是1时不用打印,不存,直接存字母
}else{
int numtemp = num; //临时存num
int numlen = 1; //算num有多少位
while(num > 9){
num /= 10;
numlen++;
}
int temp = numlen; //临时存位数
while(numtemp>0){ //注意下标的变化
s2[r+numlen-1] = numtemp%10+ '0'; //存ascii码
numlen--;
numtemp = numtemp / 10;
}
r = r+temp;
s2[r] = s1[i];
}
}
s2[r] = '\0'; //不要忘了结束符
cout << s2 <<endl;
}
return 0;
}