C++のn行のジグザグ文字列の連結を出力します
この問題では、文字のシーケンスである文字列が与えられます。そして、ジグザグパターンの長さが与えられ、このジグザグ文字列の連結文字列をn行で印刷する必要があります。
概念をよりよく理解するために、いくつかの例を見てみましょう。
例
Input : string = ‘STUVWXYZ’ n = 2. Output : SUWYTVXZ
説明 − 2行パターンの文字列のジグザグパターンは−
S U W Y T V X Z
例
Input : string = ABCDEFGH n = 3 Output: ADGBEHCF
説明 −3行の文字列のジグザグパターンは−
A E B D F H C G
問題がわかったので、その解決策を設計しましょう。ここでは、死が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
-
C ++で文字列をトークン化しますか?
最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() { string str("Hello from the dark side"); string tmp; // A string
-
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