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

指定された文字列をC++で書き込むために必要な行数


アルファベットの文字列Strと、すべての英語のアルファベットの幅を含む配列widths[]が与えられます。目標は、幅10文字のページにこの文字列を印刷するために必要な行数を見つけることです。残りの文字も印刷します。

この合計が10行以上の増分である場合、現在の文字の文字列チェック幅をトラバースして追加します。

例を挙げて理解しましょう。

入力

Str = "ababababab"
widths[] = {2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1};

出力

Count of lines: 2 Remaining width: 6

説明

line 1 : ababab ( 2+1+2+1+2+1 = 3+3+3=9)
line 2 : abab (2+1+2+1)

入力

Str = "bbbbbbbbbbdd"
widths[] = {2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1};

出力

Count of lines: 2 Remaining width: 2

説明

line 1 : bbbbbbbbbb (1+1+1+1+1+1+1+1+1+1=10)
line 2 : dd (1+1)

以下のプログラムで使用されているアプローチは次のとおりです

  • 文字列Strと各アルファベットのスペースの配列widths[]があります。

  • 関数numberOfLines(string str、int len、int w [])は、ページの行数と最後の行の文字幅を表示します。

  • 行の初期カウントをnumoflines=0とします。

  • 最初の最後の線幅をremain=0

    とします。
  • forループを使用して文字列strをトラバースします。

  • 現在の文字cをstr[i]とします。

  • cの幅をnum=width [c-’a’]として確認します。

  • この数値を追加して残します。

  • 残りの場合>=10の増分行数と更新は、numのままです。

  • forループの最後に結果を出力します。

#include <bits/stdc++.h>
using namespace std;
// Function to return the number of lines required
void numberOfLines(string str,int len, int w[]){
   int numoflines = 0;
   int remain = 0;
   //traversing string
   for (int i=0;i<len;i++){
      char c=str[i]; //current character
      int num = w[c - 'a']; //units for current character remain += num;
      if (remain >= 10){
         numoflines+=1;
         remain = num;
      }
   }
   cout<<"Count of lines: "<<numoflines;
   cout<<endl<<"Remaining width: "<<remain;
}
int main(){
   string Str = "abcdefghijklmnop";
   int length=Str.length();
   int widths[] = {2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1};
   numberOfLines(Str,length,widths);
   return 0;
}

出力

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

Count of lines: 3
Remaining width: 1

  1. C ++で指定された文字列内の「1(0+)1」のすべてのパターンを検索します

    文字列に1(0+)1のようなパターンがあるとします。ここで、(0+)は、空でない連続した1の出現を示します。すべてのパターンを見つける必要があります。パターンは重複する可能性があります。文字列は必ずしもバイナリ文字列である必要はありません。数字と小文字のみを保持できます。文字列が1101001のようなものであるとすると、そのようなパターンが2つあります。 101と1001。 この問題を解決するために、次の手順に従います- 文字列内のすべての文字cを繰り返し処理します cが1の場合、要素が0になるまで繰り返します 0のストリームが終了すると、次の文字が1かどうかを確認します

  2. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす