我试图使这个代码递归,但由于某种原因它不起作用

时间:2013-02-05 07:13:30

标签: c

我正在尝试将此代码递归,但由于某种原因它不起作用。

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++);
}

没用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的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);
}

为什么你想用递归来做这件事完全超出了我的方式,它只会浪费时间和空间。

答案 1 :(得分:0)

也许这个SO question可能对您有所帮助。它使用正则表达式解决您的问题