abb软件和C语言,c语言——把abbccc压缩成a2b3c

该博客讨论了一个C++程序,用于实现字符串压缩功能,根据连续重复字符进行压缩,输出压缩后的字符串。示例中展示了如何处理输入字符串并生成压缩结果。同时,对用户关于解压缩的提问给出了思路,但未提供具体代码实现。
摘要由CSDN通过智能技术生成

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

xoguyching

推荐于 2016.05.02

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:59%    等级:6

已帮助:955人

题目描述(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”

*/

#include 

#define LEN 1000

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)

{

char c;

int count = 1,index = 0;

int i=0;

c = pInputStr[0];

for(i=1; i

{

if(pInputStr[i] == c)

{

count++;

}

else

{

if(count == 1)

{

pOutputStr[index++] = c;

}

else

{

pOutputStr[index++] = count + '0';

pOutputStr[index++] = c;

}

count =1;

c = pInputStr[i];

}

}

if(c != pInputStr[index-1])

{

if(count == 1)

{

pOutputStr[index++] = c;

}

else

{

pOutputStr[index++] = count + '0';

pOutputStr[index++] = c;

}

}

pOutputStr[index] = '\0';

}

int main()

{

char pInputStr[LEN],pOutputStr[LEN];

scanf("%s",pInputStr);

stringZip(pInputStr, strlen(pInputStr), pOutputStr);

printf("%s\n",pOutputStr);

system("pause");

return 0;

}

e5e70cd734760f76ffd1307ae9d3e6f6.png

这个的原题应该是上面的注释部分,我已经测试过了,DEVCPP环境下测试的,你看看有什么疑问可以继续追问,望采纳!追问: 把a2b3c解压缩成abbccc,怎么做呢

追答:这个暂时时间比较近没办法帮你写了,不过可以给你思路(不行再告诉我,我帮你看看):

1、函数的参数可以考虑个上面的是一样的:const char *pInputStr, long lInputLen, char *pOutputStr

2、对输入的字符串分析,遇到数字字符转换成数,这样可以得到后面的字符数目,如a2b30c可以采用一个计数器count=0;读到a为非数字字符,直接将其赋值给输出字符串,读到2

为数字字符,count = count*10+‘2’-‘0’;读到字符b时对count计数,赋值给输出字符串,直到count为0为止;其他的依次类推

00分享举报

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值