鱼C论坛

 找回密码
 立即注册
查看: 1349|回复: 7

[已解决]C语言字符串去重,新手求大佬帮助,跪谢!

[复制链接]
发表于 2020-11-27 18:10:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
传入一个字符串和重复的字符。返回一个去重后的字符串,
返回结果一直是空字符。琢磨很久不明白自己错在哪里,求大佬指点问题所在,跪谢

rep_str("abcccd", 'c')

char* rep_str(char *p1,char _c){
    printf("*p1:%s ,_c: %c\n",p1,_c);
    assert(p1 != NULL);
    char *arr = ((char *)malloc(sizeof(p1) + 1));
    if ( arr == NULL ) {return NULL; }
    char *tem_arr = arr;
   
    while (*p1 != '\0') {
        
        if (*p1 != _c) {
            *tem_arr = *p1;
            *tem_arr ++;
        }else{
            printf("重复字符是:%c\n",*p1);
        }
        *p1 ++;
    }
    return  tem_arr;
}
最佳答案
2020-11-27 19:22:51
本帖最后由 永恒的蓝色梦想 于 2020-11-27 21:14 编辑
胡子大叔 发表于 2020-11-27 18:43
就是
char *str1 = "abccccccd";
char c1 = 'c';

#include<stdio.h>


char* rep_str(char* const str, const char ch) {
    char* fast, * slow;

    if (str) {
        fast = slow = str;

        while (*fast) {
            if (*fast - ch) {
                *slow = *fast;
                slow++;
            }

            fast++;
        }

        *slow = '\0';
        return str;
    }
    else {
        return 0;
    }
}



int main() {
    char str[] = "abcccd";
    rep_str(str, 'c');
    puts(str);
    return 0;
}

截图

截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 18:36:26 | 显示全部楼层
传入一个字符串和重复的字符。返回一个去重后的字符串,
题目听不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-27 18:43:21 | 显示全部楼层
本帖最后由 胡子大叔 于 2020-11-27 20:39 编辑


就是
char str[] = "abccccccd";
char c1 = 'c';

函数需要得到abd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 19:22:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 永恒的蓝色梦想 于 2020-11-27 21:14 编辑
胡子大叔 发表于 2020-11-27 18:43
就是
char *str1 = "abccccccd";
char c1 = 'c';

#include<stdio.h>


char* rep_str(char* const str, const char ch) {
    char* fast, * slow;

    if (str) {
        fast = slow = str;

        while (*fast) {
            if (*fast - ch) {
                *slow = *fast;
                slow++;
            }

            fast++;
        }

        *slow = '\0';
        return str;
    }
    else {
        return 0;
    }
}



int main() {
    char str[] = "abcccd";
    rep_str(str, 'c');
    puts(str);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-27 19:44:59 | 显示全部楼层

大佬,你这样写会崩溃在 *slow = *fast;这一句,不知道为什么
D959C55BB8ED572C8F639C397F92EC78.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-27 19:50:09 | 显示全部楼层
经过一位C语言交流群的群友指点,是因为我返回错了。但我仍有疑惑
*tem_arr = arr
*tem_arr 不是已经接收了arr吗  为什么后面对其进行
  *tem_arr = *p1;
  *tem_arr ++;
确 tem_arr 确拿不到值呢?
如果返回*tem_arr的话取到的应该是字符串的第一位字符吧?[img][/img]
03945294C711F2EDCA49AC9AF6D73973.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 20:22:22 | 显示全部楼层
胡子大叔 发表于 2020-11-27 19:44
大佬,你这样写会崩溃在 *slow = *fast;这一句,不知道为什么

我写的函数的参数必须是可以修改的字符串,字符串常量不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-27 20:36:51 From FishC Mobile | 显示全部楼层
本帖最后由 胡子大叔 于 2020-11-27 20:40 编辑
永恒的蓝色梦想 发表于 2020-11-27 20:22
我写的函数的参数必须是可以修改的字符串,字符串常量不行


rep_str("abcccd", 'c')  噢,我是这样调用的。等下试试,感谢大佬指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表