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这不适合这个设计。有什么想法吗?也许是暗示?