C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で再帰を使って文字列を反転する方法

再帰とは

再帰(リカージョン)とは、自己相似的な形で同じ処理を繰り返していく手法のことです。プログラミング言語において、ある関数の中からその関数自身を呼び出すことができる仕組みがあり、この呼び出しは「再帰呼び出し」と呼ばれます。

C++では、この再帰的な関数を利用することで、文字列をシンプルなコードで反転させることができます。以下のサンプルプログラムを見てみましょう。

サンプルコード

#include <bits/stdc++.h>
using namespace std;
void reverse(string str){
    if(str.size() == 0){
        return;
    }
    reverse(str.substr(1));
    cout << str[0];
}
int main(){
    string a = "Arnold";
    cout<<"recursive reverse (Arnold) ::";
    reverse(a);
    return 0;
}

実行結果

上記のC++プログラムは、文字列「Arnold」を入力として受け取り、再帰を適用することで「dlonrA」という結果を出力します。

Recursive reverse (Arnold):: dlonrA

再帰による反転の仕組み

このプログラムがどのように動作するのか、順を追って説明します。

まず、reverse関数は受け取った文字列の長さをチェックし、文字列が空であれば処理を終了します。これが再帰の終了条件(ベースケース)です。

次に、str.substr(1)によって先頭の1文字を除いた残りの文字列を取り出し、それに対して自分自身を再度呼び出します。これにより、文字列が空になるまで再帰呼び出しが繰り返されます。

すべての呼び出しが完了した後、各呼び出し段階で保持していた先頭の文字が、呼び出しと逆の順序でcoutに出力されます。その結果、元の文字列が完全に反転された形で表示されるという仕組みです。

  1. C++で文字列をトークン化(分割)する2つの方法を解説

    文字列のトークン化(分割)とは、1つの文字列を区切り文字(スペースやカンマなど)を基準に、複数の部分文字列へ分割する処理のことです。C++では、標準ライブラリだけでもいくつかの方法で実現できます。本記事では、代表的な2つの方法をサンプルコード付きで紹介します。方法1:stringstreamを使って空白で分割する1つ目の方法は、stringstreamを使ってスペースで区切られた単語を順に読み取る方法です。この方法はやや制限がありますが、適切なチェックを加えれば十分に目的を果たすことができます。サンプルコード#include <vector> #include <string

  2. C#で文字列を反転する方法(Array.Reverseの使い方)

    C#で文字列を反転する方法 C#で文字列を逆順に並べ替えたい場合は、Array.Reverse()メソッドを使うのが最も簡単です。文字列はそのままでは直接反転できないため、一度文字配列(char配列)に変換してから反転処理を行います。 文字列を反転するサンプルコード 以下は、文字列を反転して返すカスタムメソッドの例です。ここでは、引数として渡された文字列「Henry」を反転させています。 public static string ReverseFunc(string str) { char[] ch = str.ToCharArray(); Array.Reverse(ch)