练习二 字符串压缩

通过键盘输入一串小写字母(a到z)组成的字符串。请编写一个字符串压缩程序(函数实现),将字符串中连续出席的重复字母(不超过9个)进行压缩,并输出压缩后的字符串。

压缩规则:

1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。

2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

实现字符串压缩功能,将以下程序片段填充完整:

int main()
{
char a[1000];//原始字符串
cin>>a;
int len;//字符串长度
char b[1000];//压缩后的字符串
stringZip(a,len,b);
cout<<b<<endl;
return 0;
}
void stringZip(const char *pInputStr, int lInputLen, char *pOutputStr){
       //函数实现
}

输入

一个字符串(不超过1000个字符)

输出

压缩后的字符串

样例输入

cccddecc

样例输出

3c2de2c

 

#include <iostream>
#include <string.h>
using namespace std;
void stringZip(const char* plnputStr, int llnputLin, char* pOutputStr);
int main()
{
    char a[1000];//原始字符串
    cin >> a;
    int len=strlen(a);//字符串长度
    char b[1000];//压缩后的字符串
    stringZip(a, len, b);
    cout << b << endl;
    return 0;
}
void stringZip(const char* pInputStr, int lInputLen, char* pOutputStr) {
    int i = 0, j = 0;//i指向原始字符串中的字符下标,j指向压缩后的字符串中的字符下标
    while (i < lInputLen) {
        char current_char = pInputStr[i];//当前字符
        int count = 1;//当前字符重复出现的次数,初始值为1
        while (i + count < lInputLen && pInputStr[i + count] == current_char && count < 9) {//判断连续出现的字符是否超过了9个
            count++;//累加重复的次数
        }
        if (count > 1) {//如果有重复字符
            pOutputStr[j++] = count + '0';//把重复次数存入压缩字符串中
        }
        pOutputStr[j++] = current_char;//把当前字符存入压缩字符串中
        i += count;//更新原始字符串中的下标
    }
    pOutputStr[j] = '\0';//压缩后的字符串要以'\0'结尾
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纳皮尔的骨头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值