问题描述:有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
请设计一个程序,采用该压缩方法对字符串压缩并输出。请编写一个函数compress,采用该压缩方法对字符串src进行压缩。函数定义如下:
char *compress(char *src);
返回值:
指向压缩后的字符串数据
参数:
src:输入/输出参数,输入表示待压缩字符串,输出表示压缩后的字符串
想问一下为什么我的结果会有重复的
这是代码
#include
#include
#include
char *compress(char *src);
int main()
{
char src[100];
scanf("%s",src);
char *ps = compress(src);
puts(ps);
return 0;
}
char *compress(char *src){
char lec[100];
int i,j=0,s=1;
for (i=0;i<strlen(src);i++){
if (*(src+i)==*(src+i+1))
s++;
if (*(src+i)!=*(src+i+1)){
if (s>=3&&s<=9)
lec[j]=*(src+i),lec[j+1]=s+'0',j=j+2;
else if (s>9)
lec[j]=*(src+i),lec[j+1]=s/10+'0',lec[j+2]=s%10+'0',j=j+3;
else if (s=2)
lec[j]=*(src+i-1),lec[j+1]=*(src+i),j=j+2;
else if (s=1)
lec[j]=*(src+i),j=j+1;
s=1;
}
}
strcpy(src,lec);
}
按题主的思路,修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* compress(char* src);
int main()
{
char src[100];
scanf("%s", src);
char* ps = compress(src);
puts(ps);
return 0;
}
char* compress(char* src) {
char lec[100];
int i, j = 0, s = 1;
for (i = 0; i < strlen(src);) { // i++ 修改
s = 1; //修改
while (*(src + i) == *(src + i + s)) //if (*(src + i) == *(src + i + 1))修改
s++;
//if (*(src + i) != *(src + i + 1)) { 修改
//if (s >= 3 && s <= 9) 修改
// lec[j] = *(src + i), lec[j + 1] = s + '0', j = j + 2;修改
if (s >= 10) //else if (s > 9) 修改
lec[j++] = *(src + i), lec[j++] = s / 10 + '0', lec[j++] = s % 10 + '0';
else if (s >= 3)
lec[j++] = *(src + i), lec[j++] = s + '0';
else //if (s = 1) 修改
lec[j++] = *(src + i);
if (s >= 3)
i += s;
else
i++;
//s = 1;
//}
}
lec[j] = '\0'; //修改
strcpy(src, lec);
return src; // 修改
}