C++
 Computer >> コンピューター >  >> プログラミング >> C++

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
  1. C++で文字列をint(整数)に変換・解析する方法をわかりやすく解説

    C++で文字列をint型(整数)に変換する方法は主に2つあります。1つは文字列ストリーム(stringstream)を使う古典的な方法、もう1つはC++11で導入されたstoi関数などの標準関数を使う方法です。それぞれの使い方と特徴を詳しく見ていきましょう。方法1:stringstreamを使って文字列をintに変換するstringstreamを利用すると、文字列をあたかも入力ストリームのように扱い、int型に解析(パース)できます。ただし、この方法では変換が失敗した場合のエラーチェックを自分で行う必要がある点に注意してください。コード例#include<iostream> #in

  2. 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; } 出力 このコードを実行す