【JavaScript】補助変数を1つだけ使って文字列を反転させる方法
本記事では、任意の文字列が与えられたときに、補助用の変数をたった1つだけ使って、その文字列を反転させた結果を生成するJavaScriptプログラムを紹介します。
課題の条件
このプログラムには、以下のような厳しい制約が課されています。
- 組み込み関数(
split()やreverse()など)や、独自に定義したカスタム関数を宣言・使用してはならない - 使用してよいのはバニラJS(素のJavaScript)のみで、必要であれば基本的なループ構文を利用できる
つまり「関数呼び出しに頼らず、ロジックを自分で組み立てる」ことが求められる練習問題です。
実装コード
上記の条件を満たすコードは以下のとおりです。
const string = 'abcdef';
let reverse = '';
while (reverse.length !== string.length) {
// 元の文字列の末尾から順に1文字ずつ取り出して連結する
reverse += string[string.length - 1 - reverse.length];
}
console.log(reverse);
実行結果
コンソールには次のように出力されます。
fedcba
仕組みの解説
このアプローチのポイントは、「まだ反転できていない残りの文字数」をインデックス計算に利用することです。
string.length - 1 - reverse.length という式を見てみましょう。
- ループ開始時:
reverse.lengthは 0 なので、インデックスは5 - 0 = 5(最後の文字'f') - 1回目のループ後:
reverse.lengthは 1 なので、インデックスは5 - 1 = 4('e') - 以降も同様に、末尾から1文字ずつ順番に取り出されていく
こうして reverse の長さが元の文字列と一致するまで繰り返すことで、反転が完了します。
注意点
.lengthはプロパティであり関数ではないため、「関数を使わない」という条件に違反しません。- ブラケット記法(
string[index])による文字アクセスも、メソッド呼び出しではなくプロパティアクセスなので条件内で利用可能です。 - JavaScriptの文字列はイミutable(不変)であるため、
+=での連結のたびに新しい文字列が生成される点には留意してください。非常に長い文字列を扱う場合はパフォーマンスに影響が出る可能性があります。
このように、シンプルなwhileループとインデックス計算を組み合わせるだけで、余分な変数や関数に頼らずに文字列を反転できるのです。
-
JavaScriptで文字列内の2つ以上の連続スペースを1つのスペースに変換する方法
概要 HTMLの入力欄からユーザーが入力した文字列をJavaScriptで受け取り、その中に含まれる「2つ以上の連続した空白」を検出し、すべて1つのスペースに置き換えるプログラムを作成します。このような処理には正規表現を使うのが最もシンプルで確実な方法です。replace()メソッドの第1引数に正規表現 /\s{2}/g を指定することで、目的の結果を簡単に得られます。 使用する正規表現のポイント \s:半角スペース・タブ・改行などの空白文字にマッチします。 {2}:直前のパターンが2回以上連続する場合にマッチします。 g(グローバルフラグ):文字列内のすべての該当箇所を置換対象にします。
-
C#で文字列を反転させる方法【Array.Reverse()の使い方】
C#で文字列を逆順にする基本の方法C#で文字列を反転(リバース)したい場合は、Array.Reverse()メソッドを使うのが最もシンプルです。このメソッドは配列の要素の並びをその場で反転できるため、まず文字列を文字配列(char[])に変換してから適用する流れになります。手順1:反転したい文字列を用意する最初に、反転対象となる文字列を定義します。string str = "Amit";手順2:文字列を文字配列に変換するArray.Reverse()は配列に対して機能するため、ToCharArray()メソッドを使って文字列を文字配列へ変換します。char[] ch = s