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

C++のマトリックスにプラス「+」パターンで文字列を印刷する


文字列strが与えられた場合、マトリックスに「+」パターンで与えられた文字列strを出力する必要があります。行列にプラスパターンを形成するには、行列は正方行列でなければなりません。正方行列は、同じ数の行と列を持つ行列です。

文字列「Tutor」があるように、私たちのタスクは、文字列を中心から水平方向と垂直方向に交差して印刷し、行列の残りの要素を、与えられた図のように「x」にすることです-

C++のマトリックスにプラス「+」パターンで文字列を印刷する

入力

str[] = {“Point”}

出力

C++のマトリックスにプラス「+」パターンで文字列を印刷する

入力

str[] = {“this”}

出力

Pattern not possible

問題を解決するために以下で使用するアプローチは次のとおりです

  • 入力を取得します。

  • 入力が均等な長さでないかどうかを確認してください。

  • 最初に、マトリックス全体を「x」で設定します

  • 中央の行と中央の列に文字列を設定します

  • 結果の行列を印刷します。

アルゴリズム

Start
In function int stringcross(char str[], int n)
   Step 1→ If n % 2 == 0 then,
      Step 2→ Printf "Pattern not possible”
   Step 3→ Else
      Declare a str2[max][max]
      Declare m and set as n / 2
      For i = 0 and i < n and i++
         For j = 0 and j < n and j++
            Set str2[i][j] as 'x'
      For i = 0 and i < n and i++
         Set str2[i][m] as str[i]
      For i = 0 and i < n and i++
         Set str2[m][i] as str[i]
      For i = 0 and i < n and i++
         For j = 0 and j < n and j++
         Print str2[i][j]
      Print newline
In Function int main()
   Step 1→ Declare and Initialize str[] as "TUTOR"
   Step 2→ Declare and Initialize n with the size of the string
   Step 3→ Call stringcross(str, n-1)
Stop

#include <stdio.h>
#define max 100
int stringcross(char str[], int n){
   if (n % 2 == 0){
      //odd length string is only possible
      printf("Pattern not possible\n");
   }
   else {
      //decalaring a 2-d character array
      char str2[max][max];
      int m = n / 2;
      //Initially setting x for all elements
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            str2[i][j] = 'x';
         }
      }
      //Placing the string in a manner
      //a cross is formed.
      for (int i = 0; i < n; i++){
         //for middle columns
         str2[i][m] = str[i];
      }
      for (int i = 0; i < n; i++){
         //for middle row
         str2[m][i] = str[i];
      }
      //printing
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            printf("%c ",str2[i][j]);
         }
         printf("\n");
      }
   }
   return 0;
}
int main(){
   char str[] = {"TUTOR"};
   int n = sizeof(str)/sizeof(str[0]);
   stringcross(str, n-1);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-



  1. C++のMazeIII

    空のスペースと壁のある迷路があり、その迷路の中にボールもあるとします。ボールは、上(u)、下(d)、左(l)、または右(r)の方向に転がることで空きスペースを通過できますが、壁にぶつかるまで転がり続けます。ボールが止まると、次の方向を選ぶことができます。その迷路にも1つの穴があります。ボールが穴に転がると、ボールは穴に落ちます。 したがって、ボールの位置、穴の位置、迷路がある場合、最短距離を移動することでボールがどのように穴に落ちるかを調べる必要があります。ここで、距離は、ボールがスタート(除外)からホール(含まれる)まで移動した空きスペースの数によって定義されます。 「u」、「d」、「l

  2. C++のスパイラルマトリックスIII

    R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[