Chinaunix首页 | 论坛 | 博客
  • 博客访问: 256157
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-16 13:07
个人简介

我喜欢蓝天,也喜欢雨天。

文章分类

全部博文(71)

文章存档

2014年(14)

2013年(57)

分类: C/C++

2013-12-09 10:54:48

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
    1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
    2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数: 
     void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
    输入pInputStr:  输入字符串lInputLen:  输入字符串长度
    输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例 
    输入:“cccddecc”   输出:“3c2de2c”
    输入:“adef”     输出:“adef”
    输入:“pppppppp” 输出:“8p”

下面是我自己编写的代码,供参考:


点击(此处)折叠或打开

  1. void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
  2. {
  3.     char * pPre;
  4.     char * pCur = '\0';
  5.     char * pNext;
  6.     strcpy(pOutputStr,pInputStr);
  7.     int len = 0;
  8.     for (pPre = (char *)pInputStr,pCur = (char *)pOutputStr; pPre != '\0' && len < lInputLen -1;len ++)
  9.     {
  10.         *pCur = *pPre;
  11.         for (pNext = pPre+1;pNext != '\0';pNext++)//循环判断是否重复
  12.         {
  13.             if (*pNext == *pPre)
  14.             {
  15.                 *pCur = '1' + pNext - pPre;//记录重复的个数
  16.             }
  17.             else
  18.                 break;
  19.         }
  20.         if (*pNext == '\0' && (pNext - pPre) == 1)//到达字符串的末尾
  21.         {
  22.             *(pCur+1) = '\0';
  23.             break;
  24.         }
  25.         if ((pNext - pPre) == 1)//如果没有重复的
  26.         {
  27.             *pCur = *pPre;
  28.             pCur++;
  29.             pPre++;
  30.         }
  31.         else if((pNext - pPre) > 1)//有重复的
  32.         {
  33.             *++pCur = *pPre;
  34.             pPre = pNext;
  35.             *++pCur = *pPre;
  36.         }
  37.     }

  38. }
例如输入:abcd
输出:
输入:cccddecc
输出:

输入:aaaaa
输出:
阅读(3373) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

weiweipossible2013-12-12 21:40:38

void strzip(char* in, int len, char* o)
{
    int i, accum, zip, off;
    char prev;

    for(i = 0,accum = 0,prev = in[0],zip = 0,off = 0 ;
          i <= len ; i++)
    {
        if(prev == in[i])
       &

dongliyun2013-12-12 10:29:21

triyes:aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?

貌似这样就不对了,问题出在*pCur = '1' + pNext - pPre;//记录重复的个数 这里,有空我再修改一下。

回复 | 举报

husty8662013-12-11 07:20:24

I guess it is:
Ma

triyes2013-12-10 23:15:05

aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?