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

C++のn行のジグザグ文字列の連結を出力します


この問題では、文字のシーケンスである文字列が与えられます。そして、ジグザグパターンの長さが与えられ、このジグザグ文字列の連結文字列をn行で印刷する必要があります。

概念をよりよく理解するために、いくつかの例を見てみましょう。

Input : string = ‘STUVWXYZ’ n = 2.
Output : SUWYTVXZ

説明 − 2行パターンの文字列のジグザグパターンは−

S    U    W    Y
   T    V    X    Z
このジグザグパターンの連結は--SUWYTVXZです。

Input : string = ABCDEFGH n = 3
Output: ADGBEHCF

説明 −3行の文字列のジグザグパターンは−

A    E
   B D F H
  C G
ジグザグパターンの連結は-AEBDFHCG

問題がわかったので、その解決策を設計しましょう。ここでは、死がnになるまで、文字列の次の要素を下に伝播します。そして、死がゼロになるまで適切に起きて、それから再び降ります。次に、ソリューションの各行を印刷します。

この概念に基づいて、問題を解決できるアルゴリズムを導き出しましょう。

アルゴリズム

Step 1 : Take an array of string of size n, string arr[n], row for current row no. i.e. string in the array and the direction as 1(indicating downward traversal).
Step 2 : Traverse the string and follow step 3 - 7. For every character of the string.
Step 3 : Append the character to the current string in the array based on the value of row.
Step 4 : If row = n-1, direction = 1.
Step 5 : if row = 0, direction = -1.
Step 6 : if direction = 1, row++ .
Step 7 : else row--.
Step 8 : print all string on the array from 0 to n-1 in sequence.

このアルゴリズムに基づいて、ソリューションを実装するプログラムを作成します-

#include<bits/stdc++.h>
using namespace std;
void ZigZagConcatenationString(string str, int n){
   if (n == 1){
      cout << str;
      return;
   }
   int len = str.length();
   string arr[n];
   int row = 0;
   int direction = 1;
   bool down;
   for (int i = 0; i < len; ++i){
      arr[row].push_back(str[i]);
      if (row == n-1)
         direction = -1;
      else if (row == 0)
         direction = 1;
      (direction == 1)? (row++): (row--);
   }
   for (int i = 0; i < n; ++i)
      cout << arr[i];
}
int main(){
   string str = "ABCDEFGH";
   int n = 3;
   ZigZagConcatenationString(str, n);
   return 0;
}

出力

AEBDFHCG

  1. C ++で文字列をトークン化しますか?

    最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() {    string str("Hello from the dark side");    string tmp; // A string

  2. Python –文字列リストのインクリメンタルスライス連結

    文字列リストに増分スライス連結を表示する必要がある場合は、単純な反復とリストスライスが使用されます。 以下は同じのデモンストレーションです- 例 my_list = ['pyt', 'is', 'all', 'fun'] print("The list is :") print(my_list) my_result = '' for index in range(len(my_list)):    my_result += my_list[index][:index