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 20:39 编辑
永恒的蓝色梦想 发表于 2020-11-27 18:36
题目听不懂
就是
char str[] = "abccccccd";
char c1 = 'c';
函数需要得到abd 本帖最后由 永恒的蓝色梦想 于 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:22
大佬,你这样写会崩溃在 *slow = *fast;这一句,不知道为什么 经过一位C语言交流群的群友指点,是因为我返回错了。但我仍有疑惑
*tem_arr = arr
*tem_arr 不是已经接收了arr吗为什么后面对其进行
*tem_arr = *p1;
*tem_arr ++;
确 tem_arr 确拿不到值呢?
如果返回*tem_arr的话取到的应该是字符串的第一位字符吧? 胡子大叔 发表于 2020-11-27 19:44
大佬,你这样写会崩溃在 *slow = *fast;这一句,不知道为什么
我写的函数的参数必须是可以修改的字符串,字符串常量不行 本帖最后由 胡子大叔 于 2020-11-27 20:40 编辑
永恒的蓝色梦想 发表于 2020-11-27 20:22
我写的函数的参数必须是可以修改的字符串,字符串常量不行
rep_str("abcccd", 'c')噢,我是这样调用的。等下试试,感谢大佬指点
页:
[1]