C++で文字列を指定した回数だけ連結するプログラムの書き方
この記事では、文字列をn回繰り返し連結して出力するC++プログラムの作成方法を解説します。連結回数nはユーザーからの入力として受け取ります。
C++では+演算子や+=演算子を使うことで、std::string型の文字列を非常に簡単に連結できます。考え方はシンプルで、空の結果用文字列を用意し、ループで入力された文字列をn回追加していくだけです。それでは、実際のコードを見ていきましょう。
アルゴリズム
concatStrNTimes(str, n)
begin res := 空の文字列 i を 1 から n まで繰り返す res := res と str を連結した文字列 end return res end
サンプルコード
以下が実際のC++コードです。cinで文字列と連結回数を受け取り、forループ内で+=演算子によって結果文字列へ順次連結しています。
#include<iostream>
using namespace std;
int main() {
string myStr, res = "";
int n;
cout << "文字列を入力してください: ";
cin >> myStr;
cout << "連結する回数を入力してください: ";
cin >> n;
for(int i = 0; i < n; i++) {
res += myStr;
}
cout << "結果: " << res;
return 0;
}実行結果
例として、「Hello」という文字列を5回連結してみます。
文字列を入力してください: Hello 連結する回数を入力してください: 5 結果: HelloHelloHelloHelloHello
補足:別の実装アプローチ
上記のループ処理以外にも、いくつかの方法があります。
std::string(n, ch): 同じ1文字を繰り返す場合はコンストラクタで直接生成できますが、複数文字の文字列には使えません。std::ostringstream: ストリームを利用して文字列を組み立てることも可能です。- 事前確保による最適化:
res.reserve(myStr.size() * n)を呼び出しておくと、メモリ再割り当てが減り、大量連結時にパフォーマンスが向上します。
最も直感的で分かりやすいのは、今回紹介したforループと+=演算子を組み合わせる方法です。用途に応じて適切な手法を選択しましょう。
-
Pythonでバイナリ文字列の1を最小スワップ回数でグループ化するアルゴリズム
問題の概要 0と1だけで構成されたバイナリ文字列 input_str が与えられます。目標は、隣接する文字同士しか入れ替えられないという制限のもとで、すべての「1」を連続した一つのグループにまとめることです。そのために必要な最小スワップ回数を求めて返します。 たとえば、入力が input_str = 10110101 の場合、答えは 4 になります。実際の入れ替えの流れは次のとおりです。 10110101 → 01110101 → 01111001 → 01111010 → 01111100 合計スワップ回数は 4 回です。 解法の考え方:中央値を基準に1を集める この問題は中央値(medi
-
Pythonで文字列・数値が回文(パリンドローム)かどうかを判定する方法【スライス活用】
本記事では、入力された文字列や数値が回文(パリンドローム)であるかどうかを判定するPythonプログラムの解決策とアプローチについて解説します。 問題の概要 文字列が入力として与えられたとき、それが回文であるかどうかを判定するPython関数を作成する必要があります。 回文とは、文字列を逆から読んでも元の文字列と完全に一致するものを指します。たとえば「78287」や「しんぶんし」などが代表的な例です。 解決のアプローチ 回文判定は、主に以下の2つの方法で実現できます。 スライスによる文字列の反転 負のインデックスを使った比較 本記事では、このうちスライスを使った文字列の反転方法を中心に