C/C++で文字列を反転させるさまざまな方法を徹底解説
このチュートリアルでは、C/C++で文字列を反転(逆順に並べ替え)するためのさまざまな方法について、具体的なプログラム例を交えながら詳しく解説します。
文字列の反転は、プログラミングの基礎的な操作の一つであり、アルゴリズムの学習や実務の両方で頻繁に登場します。ここでは、代表的な3つのアプローチを紹介します。
実装例
1. ユーザー定義のreverse_str()関数を使う方法
まず、自分で反転処理を実装する方法です。文字列の先頭と末尾から順に文字を入れ替えていく、最も基本的なアルゴリズムです。
#include <bits/stdc++.h>
using namespace std;
// 渡された文字列を反転する関数
void reverse_str(string& str){
int n = str.length();
for (int i = 0; i < n / 2; i++)
swap(str[i], str[n - i - 1]);
}
int main(){
string str = "tutorialspoint";
reverse_str(str);
cout << str;
return 0;
}この方法では、文字列の長さの半分だけループを回し、i番目の文字と後ろからi番目の文字をswap()で入れ替えます。計算量はO(n/2)、つまりO(n)となり、非常に効率的です。
2. 標準ライブラリのreverse()関数を使う方法
C++では、<algorithm>ヘッダに用意されているstd::reverse()関数を使うことで、わずか1行で文字列を反転できます。
#include <bits/stdc++.h>
using namespace std;
int main(){
string str = "tutorialspoint";
reverse(str.begin(), str.end());
cout << str;
return 0;
}reverse()には、反転したい範囲の先頭イテレータと末尾イテレータを渡します。実装の手間がなくバグも起きにくいため、特別な理由がない限りこの方法を使うのがおすすめです。
3. 反転した文字列をそのまま出力する方法
元の文字列自体は変更せず、末尾の文字から先頭に向かって順に出力するだけのシンプルな方法もあります。
#include <bits/stdc++.h>
using namespace std;
void reverse(string str){
for (int i = str.length()-1; i >= 0; i--)
cout << str[i];
}
int main(void){
string s = "tutorialspoint";
reverse(s);
return (0);
}この方法は、元の文字列を保持したまま反転結果だけが必要な場合に便利です。ただし、新しい文字列として結果を保存したい場合は、別途変数に格納する処理を追加する必要があります。
出力結果
上記のいずれの方法でも、次のように文字列「tutorialspoint」が反転されて表示されます。
tniopslairotut
まとめ
C/C++で文字列を反転させる方法として、①手動でswapを使う方法、②標準ライブラリのstd::reverse()を使う方法、③末尾から出力する方法の3つを紹介しました。用途に応じて使い分けることで、より効率的で可読性の高いコードを書くことができます。
-
クライアントサーバーモデルを用いたC/C++による文字列反転の実装方法
本記事では、クライアントとサーバーで構成されるシステムを作成する方法を解説します。クライアントが文字列をサーバーへ送信すると、サーバーがその文字列を反転(リバース)し、結果をクライアントに返却するという仕組みです。ソケットプログラミングの基本このシステムではソケットプログラミングの概念を利用します。クライアントとサーバー間の接続を確立するためには、ポートを作成する必要があります。ポート番号はソケットが使用できる任意の数値であり、接続を確立するにはクライアントとサーバーの両方で同じポート番号を使用しなければなりません。今回は例としてポート番号 4000 を使用します。コンパイルと実行の手順プログ
-
C/C++で文字列を反転する方法をサンプルコード付きで解説
C言語で文字列を反転(逆順に並べ替え)する方法を、実際のコード例とともにわかりやすく解説します。サンプルコード#include<stdio.h> #include<string.h> int main() { char s[50], t; int i = 0, j = 0; printf(\nEnter the string to reverse :); gets(s); &