首页 > 代码库 > 【2014】 字符串(2)

【2014】 字符串(2)

题目描述(40分):

通过键盘输入一串小写字母(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”

    void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
    {
        
       int Ref,subLen;
       int j = 0;
       for(long i=0;i<lInputLen;)
       {
         subLen = 1;
         Ref = i;
         while(pInputStr[++i]==pInputStr[Ref])
         {
            subLen++;
         
         }
        
         if(subLen>1)
         {
            //char L= subLen + 0x30; // 作为整数型的subLen对应的ASCII码值应该是:subLen + 0x30(因为1对应的ASCII是0x31)
                                     //此招只适用于0-9的整形转换成ASCII,如果大于9就不灵了
            //pOutputStr[j++] = L;
             char p[20];
             itoa(subLen,p,10);   //把整形subLen按十进制数转换的字符串存在指针p中
             strcpy(pOutputStr+j,p);
             j += strlen(p);
         }
         pOutputStr[j++] = pInputStr[Ref];

       }
       pOutputStr[j]=\0;
    
    }