鱼C论坛

 找回密码
 立即注册
查看: 1483|回复: 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';

  1. #include<stdio.h>


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

  4.     if (str) {
  5.         fast = slow = str;

  6.         while (*fast) {
  7.             if (*fast - ch) {
  8.                 *slow = *fast;
  9.                 slow++;
  10.             }

  11.             fast++;
  12.         }

  13.         *slow = '\0';
  14.         return str;
  15.     }
  16.     else {
  17.         return 0;
  18.     }
  19. }



  20. int main() {
  21.     char str[] = "abcccd";
  22.     rep_str(str, 'c');
  23.     puts(str);
  24.     return 0;
  25. }
复制代码

截图

截图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 18:36:26 | 显示全部楼层
传入一个字符串和重复的字符。返回一个去重后的字符串,
题目听不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

函数需要得到abd
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. #include<stdio.h>


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

  4.     if (str) {
  5.         fast = slow = str;

  6.         while (*fast) {
  7.             if (*fast - ch) {
  8.                 *slow = *fast;
  9.                 slow++;
  10.             }

  11.             fast++;
  12.         }

  13.         *slow = '\0';
  14.         return str;
  15.     }
  16.     else {
  17.         return 0;
  18.     }
  19. }



  20. int main() {
  21.     char str[] = "abcccd";
  22.     rep_str(str, 'c');
  23.     puts(str);
  24.     return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬,你这样写会崩溃在 *slow = *fast;这一句,不知道为什么
D959C55BB8ED572C8F639C397F92EC78.jpg
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我写的函数的参数必须是可以修改的字符串,字符串常量不行
小甲鱼最新课程 -> https://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')  噢,我是这样调用的。等下试试,感谢大佬指点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 04:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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