• 字符串的压缩【百度】


    题目如下:

    通过键盘输入一串小写字母(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     long temp=0,d_p=0,repeatCharNum=0,i=0;
     3     char *a=new char[10],* temp2;
     4     bool endingRepeat=false ;
     5     for (;i<lInputLen-1;i++)
     6     {
     7         pOutputStr[d_p++]=pInputStr[i];
     8         if(pInputStr[i]==pInputStr[i+1]){
     9             if(i==lInputLen-2){
    10                 endingRepeat=true;
    11             }
    12             d_p--;
    13             repeatCharNum=2;
    14             temp=i+1;
    15             while(temp<lInputLen-1){
    16                 temp++;
    17                 if(pInputStr[temp]==pInputStr[i]){
    18                     if(temp==lInputLen-1){
    19                         endingRepeat=true;
    20                     }
    21                     repeatCharNum++;
    22                 }
    23                 else
    24                 {
    25                     break;
    26                 }
    27             }
    28             itoa(repeatCharNum,a,10);
    29             temp2=&a[0];
    30             while(*temp2){
    31                 pOutputStr[d_p++]=*temp2;
    32                 temp2++;
    33             }
    34             pOutputStr[d_p++]=pInputStr[i];
    35             if(temp!=i) i=temp-1;
    36         }
    37     }
    38     if (!endingRepeat)
    39     {
    40         pOutputStr[d_p++]=pInputStr[i];
    41     }
    42     pOutputStr[d_p++]=0;
    43 }
  • 相关阅读:
    Ubuntu16.04 中 Vscode 如何断点调试C语言程序
    PHP疑难杂症
    PHP之外观模式
    23种设计模式之适配器模式(Adapter Pattern)
    23种设计模式之原型模式(Prototype Pattern)
    23种设计模式之单例(Singleton Pattern)
    23种设计模式之抽象工厂(Abstract Factory Pattern)
    23种设计模式之工厂方法(Factory Method Pattern)
    简单工厂
    Nosql之Redis
  • 原文地址:https://www.cnblogs.com/havePassed/p/3560043.html
Copyright © 2020-2023  润新知