C++で文字列を波状パターンで出力する方法
問題の概要
この記事では、文字列と整数 n が与えられたとき、その文字列を n 行の波状パターン(ウェーブパターン)として出力する方法を解説します。
まず、具体例を使って問題を理解しましょう。
入力: Tutorial n = 3
出力:
T r
U o i s
t l波状パターンの仕組み
波状パターンは、文字列の各文字を1つずつ出力しながら、出力位置を1行ずつ下へ移動させていくことで描画されます。n 行目に到達したら移動方向を反転させて1行ずつ上へ戻り、文字列の文字がなくなるまでこの動きを繰り返します。結果として、文字がジグザグに配置された波のような模様が完成します。
実装例
以下のコードは、この解法の実装例です。
#include<bits/stdc++.h>
using namespace std;
void printWavePattern(string s, int n) {
if (n==1) {
cout<<s;
return;
}
int len=s.length();
char a[len][len]={ };
int row=0;
bool down;
for (int i=0; i<len; i++) {
a[row][i]=s[i];
if (row==n-1)
down=false;
else if (row==0)
down=true;
(down)?(row++):(row--);
}
for (int i=0; i<n; i++) {
for (int j=0; j<len; j++) {
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
int main() {
string str = "TutorialsPoint";
int n = 4;
cout<<n<<" Line wave pattern '"<<str<<"' is:\n";
printWavePattern(str, n);
}アルゴリズムのポイント
このプログラムでは、行数×文字列の長さの2次元配列を用意し、各文字をジグザグに配置していきます。ブール変数 down で移動方向を管理し、最下行(row == n-1)に達したら上向きへ、最上行(row == 0)に達したら下向きへと方向を切り替えます。なお、n が 1 の場合は波にならないため、文字列をそのまま出力して終了します。最後に配列の各行を順に出力することで、波状パターンが完成します。
出力結果
4 Line wave pattern 'TutorialsPoint' is − T a n u i l i t t r s o o P
-
C++で文字列をint(整数)に変換・解析する方法をわかりやすく解説
C++で文字列をint型(整数)に変換する方法は主に2つあります。1つは文字列ストリーム(stringstream)を使う古典的な方法、もう1つはC++11で導入されたstoi関数などの標準関数を使う方法です。それぞれの使い方と特徴を詳しく見ていきましょう。方法1:stringstreamを使って文字列をintに変換するstringstreamを利用すると、文字列をあたかも入力ストリームのように扱い、int型に解析(パース)できます。ただし、この方法では変換が失敗した場合のエラーチェックを自分で行う必要がある点に注意してください。コード例#include<iostream> #in
-
C++でint型をstring型に変換する方法を解説
整数(int)を文字列(string)に変換したい場合、いくつかの方法があります。まずはC言語由来のitoa関数を使う方法から見ていきましょう。 itoa関数を使う方法 itoaは「integer to ASCII」の略で、整数値を文字列に変換するC言語の関数です。以下のように使用します。 例 #include<iostream> int main() { int a = 10; char *intStr = itoa(a); string str = string(intStr); cout << str; } 出力 このコードを実行す