标签:
#include "iostream"
#include "cstdio"
#include "vector"
#include "string"
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    string a;
    while(t--){
        cin>>a;
        int len=a.length();
        int count01=1;
        vector<char> v;
        int i;
        for( i=1;i<len;i++){
            if(a.at(i)==a.at(i-1)){//此位置字母与前一个是否相同
                count01++;
                continue;//相同计数器加1
            }else{//不相同判断计数器是否为1(因为计数器为一时不插入字符串)
                if(count01!=1){//计数器可能非常大,接近10000,存入一字符数组,在倒序插入字符串
                    char str[10000];
                    int j=0;
                    while(count01!=0){
                        str[j]=count01%10+48;
                        j++;
                        count01/=10;
                    }
                    for(int k=j-1;k>=0;k--){
                        v.push_back(str[k]);
                    }
                    v.push_back(a.at(i-1));//插入前一字符
                    count01=1;
                }
               else{
                    v.push_back(a.at(i-1));//计数器为一,直接插入前一字符
                }
}
        }
        if(count01!=1){//
            char str[10000];
                int j=0;
                while(count01!=0){
                    str[j]=count01%10+48;
                    j++;
                    count01/=10;
                }
            for(int k=j-1;k>=0;k--){
                v.push_back(str[k]);
            }
        }
        v.push_back(a.at(i-1));//因为总是拿此位置与前一个位置的字符比较,而输出前一个字符,
        //输入字符串没有后一个字符串与其相比而输出最后一个字符,所以对最后一个字符单独处理
        vector<char>::iterator it;//迭代器遍历输出
        for(it=v.begin();it!=v.end();it++){
            printf("%c",*it);
        }
        printf("\n");
    }
}
标签:
原文地址:http://www.cnblogs.com/kimsimple/p/5666836.html