C语言求助:请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1、仅压缩连续重复出现的字... 通过键盘输入一串小写字母(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”
展开
 我来答
听不清啊
高粉答主

推荐于2018-03-13 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:2亿
展开全部

#include <stdio.h>

void stringZip(const char

*pInputStr, long lInputLen, char *pOutputStr)

{ int n=1;

  char c,*p1=pInputStr,*p2=pOutputStr;

  while(*p1)

  {

   c=*(p1++);

   while(*p1==c){n++;p1++;}

   if(n>1)

   {

    if(n>999){*(p2++)=48+n/1000; n/=10;}

    if(n>99){*(p2++)=48+n/100; n/=10;}

    if(n>9){*(p2++)=48+n/10; n/=10;}

    *(p2++)=48+n;

   }

   *(p2++)=c;

   n=1;

  }

  *p2='\0';

}

void main()

{ char s1[200],s2[200];

  gets(s1);

  stringZip(s1,strlen(s1),s2);

  puts(s2);

}

追问
谢谢啦
追答
望采纳。
White_MouseYBZ
2013-09-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6780万
展开全部
用下面的代码给你提供个思路。这代码连续字符不得超过9个……
#include "stdio.h"
void main(void){
char a[1000]="gcccddecc";
int i,j,k,n;
printf("Type an integer(a~z)...\nStr=");
gets(a);
for(k=i=0;a[i];i++){
for(j=i+1,n=0;a[i]==a[j];j++) n++;
if(n){
a[k++]=n+'1';
a[k++]=a[--j];
i+=n;
}
else a[k++]=a[i];
}
a[k]='\0';
printf("The result = %s.\n",a);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
随风凌乱的小白
2019-08-28
知道答主
回答量:4
采纳率:0%
帮助的人:2707
展开全部
#include <stdio.h>
int main()
{
char a[1000]= {'\0'};
scanf("%s",a);
char result[1000]= {'\0'};
int i=0;
int j=1;
char state;
int length=0;
for(i=0; i<1000&&a[i]!='\0'; i++)
{
state=a[i];
if(i<999&&a[i]==a[i+1])
{
j+=1;
}
else
{
if(j==1)
{
result[length]=state;
length+=1;
}
else
{
result[length]=j+'30';
result[length+1]=state;
length+=2;
}
j=1;
}
}
for(i=0; i<1000; i++)
{
printf("%c ",result[i]);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cjj796
2013-09-27 · TA获得超过8709个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3524万
展开全部
你这怎么都是这么奇怪的问题呢!!
c语言求助:自动分离出各个子串,这个你测试过了吗,可以吗
追问
下面,有补充说明呀,不会所以请教啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式