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

C言語・C++で文字列を反転(逆順)する方法をわかりやすく解説

この記事では、文字列をその場(in-place)で反転する方法について解説します。反転処理の際に別のメモリ領域を確保せず、元の配列内で直接文字を入れ替えていくのがポイントです。

C++であれば std::string を利用できますが、C言語の場合は文字型配列(char配列)を使って文字列を扱う必要があります。本プログラムでは文字配列で文字列を受け取り、それを反転して表示します。

入力:文字列 "This is a string"
出力:反転後の文字列 "gnirts a si sihT"

アルゴリズム

reverse_string(str)

入力 − 反転対象の文字列

出力 − 反転された文字列

基本的な考え方はシンプルです。文字列の先頭と末尾からそれぞれポインタ(インデックス)を進めながら、対応する位置の文字を交換していきます。中央で出会った時点で反転は完了します。

len := 文字列の長さ
i := 0、j := (len - 1)
i < j の間、繰り返し:
   i番目とj番目の文字を交換する
   i := i + 1
   j := j - 1
繰り返し終了

この手法の計算量は O(n/2)=O(n) であり、余分なメモリをほとんど消費しないため、非常に効率的です。

サンプルコード

#include <iostream>
#include<cstring>
using namespace std;
void reverse(char s[]) {
    int len = strlen(s); // 文字列の長さを取得
    int i, j;
    for (i = 0, j = len - 1; i < j; i++, j--) {
        swap(s[i], s[j]);
    }
}
int main() {
   char s[20] = "This is a string";
   cout << "Main String: " << s <<endl;
   reverse(s);
   cout << "Reversed String: " << s <<endl;
}

実行結果

Main String: This is a string
Reversed String: gnirts a si sihT

補足ポイント

  • C++の場合std::string を使えば、std::reverse(str.begin(), str.end())<algorithm> ヘッダが必要)という1行でも同様の反転が可能です。
  • C言語の場合swap 関数は標準ライブラリに存在しないため、一時変数を使って char tmp = s[i]; s[i] = s[j]; s[j] = tmp; のように手動で交換する必要があります。
  • 注意点:日本語などのマルチバイト文字を含む文字列を反転すると文字化けする可能性があるため、この手法はASCII文字列に適用するのが安全です。
  1. JavaScriptで文字列を逆順に反転する方法をわかりやすく解説

    JavaScriptで文字列を逆順に反転したい場合、いくつかの実装方法があります。ここでは、whileループを使って文字列「qries」を反転させる基本的なサンプルコードを紹介します。 サンプルコード <!DOCTYPE html> <html>    <body>       <script>          var myStr;          function reverseStr(myS

  2. Androidで文字列を逆順に表示する方法をわかりやすく解説

    本記事では、Androidアプリ開発において、ユーザーが入力した文字列を逆順(リバース)にして画面に表示する方法を実例とともに解説します。EditTextに入力されたテキストを、ボタンのクリックをきっかけに反転させてTextViewへ出力するシンプルなサンプルです。手順1:新規プロジェクトを作成するまず、Android Studioを開き、「File」→「New Project」から新しいプロジェクトを作成します。プロジェクト作成時に必要な項目をすべて入力してセットアップを完了させましょう。手順2:レイアウトファイル(activity_main.xml)を編集する次に、res/layout/a