c语言,利用指针作为函数参数实现字符串压缩

问题描述:有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于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);
}


img

按题主的思路,修改如下,改动处见注释,供参考:

#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;      // 修改
}