ccjhjbf 2023-03-02 19:42 采纳率: 50%
浏览 94
已结题

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

问题描述:有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
请设计一个程序,采用该压缩方法对字符串压缩并输出。请编写一个函数compress,采用该压缩方法对字符串src进行压缩。函数定义如下:
char *compress(char *src);
返回值:
指向压缩后的字符串数据
参数:
src:输入/输出参数,输入表示待压缩字符串,输出表示压缩后的字符串
想问一下为什么我的结果会有重复的

这是代码

#include<stdio.h>
#include<string.h>
#include<stdlib.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++){
        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

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-03-03 13:23
    关注

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

    #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;      // 修改
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 创建了问题 3月2日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装