【发布时间】:2020-08-12 20:10:25
【问题描述】:
我正在尝试创建一个递归函数,用于从字符串中删除连续的重复字符。除了前几个字符外,它工作正常。例如,如果我的输入是MMMMMuuuuuOOOOOKKKKLLLEE OOOOLLL 或类似的东西,则输出是MMuOKLE OL。正如您所看到的,除了前两个 M 之外,它工作正常。我怎样才能使第一部分也能完成这项工作?
这是我的代码:
#include <stdio.h>
char* remove_duplicates (char* str){
if(*(str+1)!='\0'){
if(*str==*(str+1)){
*(str+1)=*(str+2);
remove_duplicates(str+1);
}
remove_duplicates(str+1);
}
return str;
}
int main()
{
char sample[] = "MMMMMuuuuuOOOOOKKKKLLLEE OOOOLLL";
printf("OLD: |%s|\n", sample);
printf("NEW: |%s|\n", remove_duplicates(sample));
return 0;
}
【问题讨论】:
-
除了其他可能出错的情况外,如果您将空字符串 (
"") 传递给remove_duplicates(),会发生什么? -
将测试用例简化为查看问题所需的最小字符串。然后在纸上遍历它并在调试器中逐步遍历它。
-
@SteveFriedl 我主要将
""传递给remove_duplicates()。什么都没有发生。它再次打印菜单。 -
@gokbeykeskin - 我相信你需要更仔细地看看这个。如果第一个字符是 NUL 字节,是什么导致函数停止,而它之后的所有内容都是随机垃圾?
-
返回参数而不是
void remove_duplicates(char * str)有什么兴趣?这使得第二次呼叫非终端没有任何意义
标签: c recursion c-strings function-definition