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

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

}

追问

谢谢啦

追答

望采纳。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-27
用下面的代码给你提供个思路。这代码连续字符不得超过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);
}本回答被网友采纳
第2个回答  2019-08-28
#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;
}
第3个回答  2013-09-27
你这怎么都是这么奇怪的问题呢!!
c语言求助:自动分离出各个子串,这个你测试过了吗,可以吗追问

下面,有补充说明呀,不会所以请教啊

相似回答