字符串压缩

压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数: 
     void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
    输入pInputStr:  输入字符串lInputLen:  输入字符串长度
    输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例 
    输入:“cccddecc”   输出:“3c2de2c”
    输入:“adef”     输出:“adef”

    输入:“pppppppp” 输出:“8p”

//注意,当个数不是1位数时,需要特殊处理一下。

#include <iostream>
using namespace std;
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){  
   const char *tmp=pInputStr;
   const char *tmp2=pInputStr+1;   
   char *output=pOutputStr;  
   while(*tmp!='\0'){
         if(*tmp!=*tmp2)
         {
             int dif= tmp2-tmp;  
             //这一段是为了处理如果有100位a,超过1位数的压缩字符串。  
             if(dif>1){  //大于1是因为,如果1的话,就不打印1 
             int num=dif;
             int count=0;
             while(num){
                   count++;
                   num=num/10;
              }
             output+=count-1;
             while(dif){
                 int mod =dif%10;
                 *output= '0'+mod;
                 output--;
                 dif= dif/10;     
                        
             }
             output+=count+1;
             }
             *output++ =*tmp;
             tmp = tmp2++;
         } else {
                tmp2++;                     
         }          
    }
    *output='\0';
}

int main(){
   char* src="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbccc";
  //  char* src="aaaaaaaaabbbccc";
  // char* src="pppppppp";
  // char* src="cccddecc";
    char* des=new char[strlen(src)+1];
    stringZip(src,strlen(src),des);
    cout<<des;
    delete[] des;des = NULL;  
    system("pause");
    return 0;
    }



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值