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

C++で連続する文字を同じ行にまとめて出力する方法

この問題では、文字列が与えられ、連続する文字(アルファベット順で隣り合う文字)が2つ以上続く場合はそれらを同じ行にまとめて出力し、連続していない場合は改行して別の行に出力する必要があります。

まず例を見ながら、この概念をより深く理解しましょう。

入力 : abcxstk
出力 :
abc
x
st
k

解説 − 「abc」は連続しているため、1行に出力されます。次の「x」は連続していないため、ここで改行が入ります。次の「s」は「x」と連続していないため、改行して出力します。次の「t」は「s」と連続しているため、続けて出力されます。最後の「k」は「t」と連続していないため、改行して出力します。

この問題の解き方はシンプルです。文字列内の各文字を直前の文字と比較します。両者が連続している(文字コードの差が±1である)場合はそのまま出力し、そうでない場合は改行を挿入してから出力します。

実装例

それでは、このロジックに基づいてプログラムを作成してみましょう。

#include <iostream>
using namespace std;
int main(){
    string str = "stukfrpq";
    cout << str[0];
    for (int i=1; str[i]!='\0'; i++){
        if ((str[i] == str[i-1]+1) || (str[i] == str[i-1]-1))
            cout << str[i];
        else
            cout << "\n" << str[i];
    }
    return 0;
}

出力結果

stu
k
f
r
pq

このプログラムでは、最初の文字を出力した後、2文字目以降を順番にチェックしていきます。現在の文字が前の文字と連続している場合はそのまま出力し、連続していない場合は改行コードを出力してから文字を出力します。これにより、連続する文字だけが同じ行にまとまって表示されます。

  1. C++で二分木を見やすい形式で2次元配列に出力する方法

    本記事では、二分木(バイナリツリー)を m×n の2次元文字列配列として整形して出力する方法を解説します。出力には以下のルールが適用されます。行数 m は、与えられた二分木の高さと一致すること。列数 n は、必ず奇数になること。ルートノードの値は、最初の行のちょうど中央に配置する。ルートノードが存在する行と列によって、残りの領域は「左下」と「右下」の2つの部分に分割される。左側の部分木は左下の領域へ、右側の部分木は右下の領域へそれぞれ出力する。左右の領域は同じサイズとする。片方の部分木が存在しない場合でも、何も出力はしないものの、もう一方の部分木と同じサイズの領域は確保しておく必要がある。ただ

  2. C++で二分木のレベル順走査(幅優先探索)を行ごとに出力する方法

    二分木が与えられたとき、そのレベル順走査(幅優先探索)の結果を、レベル(行)ごとに表示する関数をC++で実装します。 レベル順走査とは、木の最上位(ルート)から開始し、同じ深さにあるノードを左から右へ順に訪問していく手法です。上の階層から下の階層へと処理を進め、各レベルの出力を1行として表示していきます。 問題の例 例として、次のような二分木を考えてみましょう。 3 / \ 2 1 / \ \ 10 20 30 この二分木に対してレベル順走査を行うと、次のような出力が得られます。 Level 0: