C++で文字列の前半と後半を逆順に交互に組み合わせて新しい文字列を生成する方法
このチュートリアルでは、文字列の前半と後半をそれぞれ末尾から逆順にたどりながら、その文字を交互に組み合わせて新しい文字列を作成するプログラムをC++で実装する方法を解説します。
問題を解く手順
以下の手順に従ってプログラムを作成していきましょう。
- 文字列を初期化します。
- 文字列の長さを求めます。
- 前半部分と後半部分のインデックスをそれぞれ変数に保存します。
- 前半と後半の両方の末尾から先頭に向かって反復処理を行います。
- 各文字を新しい文字列に順番に追加していきます。
- 最後に、完成した新しい文字列を出力します。
サンプルコード
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
void getANewString(string str) {
int str_length = str.length();
int first_half_index = str_length / 2, second_half_index = str_length;
string new_string = "";
while (first_half_index > 0 && second_half_index > str_length / 2) {
new_string += str[first_half_index - 1];
first_half_index--;
new_string += str[second_half_index - 1];
second_half_index--;
}
if (second_half_index > str_length / 2) {
new_string += str[second_half_index - 1];
second_half_index--;
}
cout << new_string << endl;
}
int main() {
string str = "tutorialspoints";
getANewString(str);
return 0;
}コードのポイント
first_half_indexは文字列の中央(前半の末尾)を指し、second_half_indexは文字列の最後尾を指します。- whileループの中で、前半の末尾の文字と後半の末尾の文字を1文字ずつ交互に新しい文字列へ追加しています。
- 文字列の長さが奇数の場合、後半の文字数が前半より1文字多くなるため、ループ終了後に残りの文字を追加する処理を入れています。
実行結果
上記のプログラムを実行すると、以下の出力が得られます。
asitrnoitouptsl
入力文字列「tutorialspoints」は、前半「tutorials」と後半「points」に分けられ、それぞれを逆順(「slairotut」と「stniop」)にたどりながら交互に組み合わされることで、この結果が生成されます。
まとめ
このように、文字列を前半と後半に分けて逆順に走査することで、シンプルなwhileループだけで目的の文字列変換を実現できます。計算量は文字列の長さを n とすると O(n) で、非常に効率的なアルゴリズムです。
このチュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。
-
C++で2つの文字列の共通しない文字を検索・抽出する方法
はじめに本記事では、C++を使用して2つの文字列に共通しない文字(アンコモン・キャラクター)を見つけるプログラムについて解説します。具体的には、2つの文字列が与えられたとき、どちらか一方の文字列にのみ含まれる文字を抽出し、アルファベット順にソートして出力するのが目的です。問題の概要入力として2つの文字列を受け取り、次の条件を満たす文字を出力します。片方の文字列には存在するが、もう片方には存在しない文字出力はアルファベット順(a〜z)にソートされていること例えば、「tutorials」と「point」という2つの文字列が与えられた場合、共通しない文字は「a l n p r s u」となります。ア
-
C++で2つの2進数文字列を加算するプログラムの書き方
2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁