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

バイナリ文字列がC++のどこにでも2回連続して出現するかどうかを確認します


ここで、別の興味深い問題が発生します。次の基準を持つ文字列を受け入れるコードを作成する必要があります。

  • 連続する1のすべてのグループは、長さが2である必要があります
  • 連続する1のすべてのグループは、1つ以上の0の後に表示される必要があります

0110のような文字列があると仮定します。これは、001110、010が無効であるかどうかに関係なく、有効な文字列です。

ここでのアプローチは単純です。 1の出現を見つけて、それが部分文字列011の一部であるかどうかを確認する必要があります。条件が失敗した場合、任意の部分文字列に対してfalseを返し、それ以外の場合はtrueを返します。

#include <bits/stdc++.h>
using namespace std;
bool isValidStr(string str) {
   int n = str.length();
   int index = find(str.begin(), str.end(), '1') - str.begin();
   if (index == 0) //when the string starts with 1, then return false
   return false;
   while (index <= n - 1) {
      if (str[index - 1] != '0') // If 1 doesn't appear after an 0
         return false;
      if (index + 1 < n && str[index + 1] != '1') // If '1' is not succeeded by another '1'
         return false;
      if (index + 2 < n && str[index + 2] == '1') // If sub-string is of the type "0111"
         return false;
      if (index == n - 1) // If str ends with a single 1
         return false;
      index = find(str.begin() + index + 2, str.end(), '1') - str.begin();
   }
   return true;
}
int main() {
   string str = "011000110110";
   if(isValidStr(str)){
      cout << str << " is a valid string";
   } else {
      cout << str << " is NOT a valid string";
   }
}

出力

011000110110 is a valid string

  1. C ++のバイナリ循環配列の最大連続1(またはゼロ)

    循環配列が与えられます。循環配列は、最初の要素が最後の要素の隣にある場合を考慮した配列です。キューを実装するために使用されます。したがって、最大数を数える必要があります。その配列内の連続する1または0の数。 例を挙げて理解しましょう。 入力 − arr [] ={1,1,0,1,0,1,0,1,1,1} 出力 −最大連続1は5です。または最大連続0は1です。 説明 − Arr []インデックス7から9まで、次にインデックス0と1。1は5です。連続する0はありませんが、1です。 入力 − arr [] ={0,0,0,1,0} 出力 −最大連続1は1です。または、連続する最大0は

  2. C++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},