C 我试图使这段代码递归,但由于某些原因,它不工作
我试图使这段代码递归,但由于某种原因,它不起作用C 我试图使这段代码递归,但由于某些原因,它不工作,c,C,我试图使这段代码递归,但由于某种原因,它不起作用 void compress_spaces(char *str) { char *dst = str; for (; *str; ++str) { *dst++ = *str; if (isspace(*str)) { do ++str; while (isspace(*str)); --str;
void compress_spaces(char *str)
{
char *dst = str;
for (; *str; ++str) {
*dst++ = *str;
if (isspace(*str)) {
do ++str; while (isspace(*str));
--str;
}
}
*dst = 0;
}
编辑:
我试过这个:
void text_r(char *str)
{
char *dst = str;
if(*str=='\0')return ;
*dst++ = *str;
if (isspace(*str)) {
do ++str; while (isspace(*str));
--str;
}//Missing brace from orig is this ok?
return text_r(str++);
}
没用。有什么想法吗?也许这会对你有所帮助。它解决了正则表达式的问题您的dst指针在递归调用的函数中不是同一个指针,请将其作为参数传递
void text_r(char *dst, char *str) {
if (*str=='\0')
return;
*dst++ = *str;
if (isspace(*str)
while (isspace(*str++));
else
++str;
return text_r(dst, str);
}
顺便说一句,我完全不明白为什么要用递归来做这件事,它只会浪费时间和空间。我在这里没有看到任何递归?我在这里没有看到任何递归。向我们展示不起作用的代码,并说明哪些代码不起作用。是的,它不是递归的。您需要调用
compress\u spaces()
。@user2042145哎哟。请用这个更新你的问题。不要在评论中发布问题代码。出于好奇,你为什么要让它递归?是程序太快还是占用的内存太少?代码运行得很好!试试你的self@WhozCraig,user2042145是的,很抱歉,没有正确读取dst初始化,很抱歉。但问题仍然是一样的,每次调用函数时,你都会重新初始化dst指针,这会弄乱你的算法,把它拉到堆栈上修复它。这肯定会奏效!但在这里,我试图帮助一些学生,任务是创建一个堆栈中只有字符串的函数!我知道这有点愚蠢,但我做不到:P这不适合这个设计。有什么想法吗?也许是暗示?