胡子大叔 发表于 2020-11-27 18:10:38

C语言字符串去重,新手求大佬帮助,跪谢!

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

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 ++;
    }
    returntem_arr;
}

永恒的蓝色梦想 发表于 2020-11-27 18:36:26

传入一个字符串和重复的字符。返回一个去重后的字符串,题目听不懂

胡子大叔 发表于 2020-11-27 18:43:21

本帖最后由 胡子大叔 于 2020-11-27 20:39 编辑

永恒的蓝色梦想 发表于 2020-11-27 18:36
题目听不懂

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

函数需要得到abd

永恒的蓝色梦想 发表于 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;
}

胡子大叔 发表于 2020-11-27 19:44:59

永恒的蓝色梦想 发表于 2020-11-27 19:22


大佬,你这样写会崩溃在 *slow = *fast;这一句,不知道为什么

胡子大叔 发表于 2020-11-27 19:50:09

经过一位C语言交流群的群友指点,是因为我返回错了。但我仍有疑惑
*tem_arr = arr
*tem_arr 不是已经接收了arr吗为什么后面对其进行
*tem_arr = *p1;
*tem_arr ++;
确 tem_arr 确拿不到值呢?
如果返回*tem_arr的话取到的应该是字符串的第一位字符吧?

永恒的蓝色梦想 发表于 2020-11-27 20:22:22

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

我写的函数的参数必须是可以修改的字符串,字符串常量不行

胡子大叔 发表于 2020-11-27 20:36:51

本帖最后由 胡子大叔 于 2020-11-27 20:40 编辑

永恒的蓝色梦想 发表于 2020-11-27 20:22
我写的函数的参数必须是可以修改的字符串,字符串常量不行

rep_str("abcccd", 'c')噢,我是这样调用的。等下试试,感谢大佬指点
页: [1]
查看完整版本: C语言字符串去重,新手求大佬帮助,跪谢!