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

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


文字列とは、NULL文字('\0')で終端される1次元の文字配列のことです。文字列の反転とは、同じ文字列を逆順に並べたものを指します。例えば以下のようになります。

元の文字列: Apple is red
反転後の文字列: der si elppA

ここでは、再帰(リカーション)を利用して、文字列として与えられた文を反転して表示するC++プログラムを紹介します。

プログラム例

#include <iostream>
using namespace std;

void reverse(char *str) {
    if(*str == '\0')
        return;
    else {
        reverse(str+1);
        cout<<*str;
    }
}

int main() {
    char str[] = "C++ is fun";
    cout<<"元の文字列: "<<str<<endl;
    cout<<"反転後の文字列: ";
    reverse(str);
    return 0;
}

実行結果

元の文字列: C++ is fun
反転後の文字列: nuf si ++C

プログラムの解説

上記のプログラムでは、関数 reverse() が文字列を反転するための再帰関数として機能しています。

まず、reverse() は文字列の先頭を指すポインタ *str を受け取ります。ポインタが指す値がNULL文字('\0')であれば、文字列の終端に到達したことを意味するため、関数はそのまま返ります。NULL文字でなければ、引数を str+1(文字列の次の要素)として自分自身を再帰的に呼び出します。

この再帰呼び出しを繰り返すことで、文字列の終端まで処理が進みます。終端に達した後は、再帰呼び出しが戻りながら各文字が後ろから前へと順に出力されるため、結果として反転された文字列が表示される仕組みです。この動作は以下のコード部分で実現されています。

if(*str == '\0')
    return;
else {
    reverse(str+1);
    cout<<*str;
}

main() 関数の処理

main() 関数では、まず文字列を初期化しています。その後、元の文字列と反転後の文字列をそれぞれ画面に表示します。該当するコードは以下の通りです。

char str[] = "C++ is fun";
cout<<"元の文字列: "<<str<<endl;
cout<<"反転後の文字列: ";
reverse(str);

このように、再帰を活用するとループ処理を使わずに簡潔に文字列を反転できます。ただし、長い文字列を扱う場合は再帰の深さによるスタックオーバーフローに注意が必要です。


  1. クライアントサーバーモデルを用いたC/C++による文字列反転の実装方法

    本記事では、クライアントとサーバーで構成されるシステムを作成する方法を解説します。クライアントが文字列をサーバーへ送信すると、サーバーがその文字列を反転(リバース)し、結果をクライアントに返却するという仕組みです。ソケットプログラミングの基本このシステムではソケットプログラミングの概念を利用します。クライアントとサーバー間の接続を確立するためには、ポートを作成する必要があります。ポート番号はソケットが使用できる任意の数値であり、接続を確立するにはクライアントとサーバーの両方で同じポート番号を使用しなければなりません。今回は例としてポート番号 4000 を使用します。コンパイルと実行の手順プログ

  2. Pythonで再帰を使って文字列を反転させるプログラムの書き方

    再帰(リカージョン)の手法を使って文字列を逆順に並べ替えたい場合は、ユーザー定義の関数を再帰と組み合わせて実装します。再帰とは、大きな問題をより小さな単位に分割してそれぞれの結果を計算し、それらを組み合わせることで最終的な答えを導き出す手法です。文字列の反転においても、この考え方をそのまま応用できます。コード例以下に実際のプログラム例を示します。def reverse_string(my_string):    if len(my_string) == 0:        r