字符串压缩

问题描述:
将给定的字符串,按照规格压缩,Inplace压缩字符串
压缩规格为:相同字符连续,则压缩为“字符+数字个数”,如”aaaa”压缩为”a4

第一个想法是如果都为非重复字符的话,如abc,则编码后岂不是要a1b1c1,占用空间是之前的2倍,达不到压缩的目的,所以应该默认为1的不输出,按照这个思路,在原字符串上进行替换。

第二个想法是如果字符超过10个,即count对于的字符数字大于1个,又该如何,原博文并未处理。细想起来,这里隐含这itoa的转换,但itoa转换的字符序为倒序,需要reverse一下。

 

如下是最终的实现版本。

  size_t InplaceCompress(char* str) {
    char* first = str;
    char* last = str;
    int count = 0;
    while(*last) {
     while(*first == *++last ) {
      ++count;
     }
     printf("%c\t%d\n", *first, count);
     // todo 
     if (count > 0) {
      char* begin =  first + 1;
      ++count;
      while (count) {
       *++first = '0'+ count%10;
       count /= 10;
      }
      char* end = first;
      while (begin < end) {
        std::swap(*++begin, *--end);
      }
     }
     *++first = *last;
     count = 0;
    }
    *++first ='\0';
    return first - str;
}

 

 

转载于:https://www.cnblogs.com/westfly/archive/2013/03/18/2967000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值