1. ホーム
  2. c

[解決済み] 文字列を用いた再帰

2022-02-17 23:26:25

質問

文字列を取得し、末尾から先頭までの文字(大文字と小文字)だけを表示する再帰関数を書きたい。

for exemple:
str={"abc123#@!456DEF&^65gHj"}
Reducing(str);
output: jHgFEDcba .

しかし、私はこの関数を次の文字に移動させる方法で行き詰っています。 最後の文字が表示されるだけで、行き詰まっています。

here's my code:

void Reducing(char str[])
{
    if (str[0] == '\0')
        return ;

    if ((str[strlen(str)-1] <= 122 && str[strlen(str)-1] >= 97) || (str[strlen(str)-1] <= 90 && str[strlen(str)-1] >= 65))
        putchar(str[strlen(str)-1]);

    Reducing(str+(strlen(str)));
}

解決方法は?

のみを使用するのはどうでしょうか? str[0] の代わりに str[strlen(str) - 1] を渡すと str + 1 を再帰に使用します。

void Reducing(char str[])
{
    if (str[0] == '\0')
        return ;

    if ((str[0] <= 122 && str[0] >= 97) ||
            (str[0] <= 90 && str[0] >= 65))
        putchar(str[0]);

    Reducing(str + 1);
}