0

このコードを再帰的にしようとしていますが、何らかの理由で機能しません。

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

うまくいきませんでした。何か案は?

4

2 に答える 2

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

ちなみに、なぜ再帰でこれをやりたいのかは完全に理解できません。時間とスペースを無駄にするだけです。

于 2013-02-05T07:24:36.913 に答える
0

おそらく、このSOの質問が役立つかもしれません。正規表現で問題を解決します

于 2013-02-05T07:23:00.817 に答える