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

C++でのZigZag変換


文字列が「IWANTTOLEARNCODE」のようなものであるとします。この文字列は、nと言う特定の行数にジグザグに書き込まれます。つまり、パターンは次のようになります

I

T

A

O
W
N
O
E
R
C
D
A

L

N

E

-「ITAOWNOERCDALNE」のような行を読むと

したがって、文字列と行数を取得して、この種の操作を実行できる1つのモジュールを作成する必要があります。

これを解決するために、次の手順に従います

  • n =1の場合、sを返します
  • サイズnの文字列の配列を作成します
  • 行:=0、下:=true
  • 0から文字列のサイズまでの範囲のiの場合– 1
    • 文字列arr[row]の最後にs[i]を挿入します
    • row =b – 1の場合はdown:=false、それ以外の場合はrow =0の場合はdown:=true
    • downがtrueの場合、行を1増やし、それ以外の場合は行を1減らします
  • ans:=空白の文字列
  • 0からn–1の範囲のiの場合:
    • ans:=ans + arr [i]
  • 回答を返す

例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string convert(string s, int numRows);
};
string Solution::convert(string a, int b) {
   if(b == 1)return a;
   string arr[b];
   int row = 0;
   bool down = true;
   for(int i = 0; i < a.size(); i++){
      arr[row].push_back(a[i]);
      if(row == b - 1) down = false;
      else if(row == 0)down = true;
      if(down) row++;
      else row--;
   }
   string ans = "";
   for(int i = 0; i < b; i++){
      ans += arr[i];
   }
   return ans;
}
main(){
   Solution ob;
   cout << ob.convert("IWANTTOLEARNCODE", 3);
}

入力

"IWANTTOLEARNCODE"
3

出力

"ITECWNTLANOEAORD"

  1. C++での文字列のトークン化

    このセクションでは、C++で文字列をトークン化する方法を説明します。 Cでは、文字配列にstrtok()関数を使用できます。ここに文字列クラスがあります。次に、その文字列から区切り文字を使用して文字列を切り取る方法を説明します。 C ++機能を使用するには、文字列を文字列ストリームに変換する必要があります。次に、getline()関数を使用して、タスクを実行できます。 getline()関数は、文字列ストリーム、出力を送信するための別の文字列、およびストリームのスキャンを停止するための区切り文字を受け取ります。 関数がどのように機能しているかを理解するために、次の例を見てみましょう。 サン

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

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