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

C++でXより大きい数値の部分文字列の数をカウントします


0から9までの数字の文字列が与えられます。この文字列は10進数を表します。目標は、数値Xより大きい10進数を表すすべてのサブストリングを見つけることです。条件は、サブストリングが0で始まらないことです。つまり、「2021」、「02」、「021」です。 「0」は含まれません。

これを行うには、すべてのサブストリングの最初の値をチェックします。0より大きい場合は、stoi()を使用して整数に変換することにより、そのインデックスからサブストリングの作成を開始します。 substring>Xインクリメントカウントの場合。

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

入力 − str =” 123” X =12

出力 −数値がXより大きい部分文字列の数は− 2

説明 12を超える部分文字列は123と23です。

入力 − str =” 111” X =100

出力 −バイナリ文字列内の偶数の10進値の部分文字列の数は− 1

説明 111だけが100を超えています。

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

  • 文字列strは、数値の文字列としてのみ使用します。

  • strの長さをlen=str.length()

    に格納します
  • 関数greater_X(string str、int x)は、文字列とその長さを受け取り、Xより大きい10進数を形成する部分文字列の数を返します。

  • FORループを使用して文字列をトラバースします

  • インデックスi=0からi

  • str [i]!=’0’の場合、それから始まるすべてのサブストリングが有効になります。

  • インデックスj=1からi+j

  • stoi()を使用して、部分文字列str.substr(i、j)を10進数に変換します。 Xより大きい場合。インクリメントカウント。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
int greater_X(string str, int x){
   int count = 0;
   int len = str.length();
   for (int i = 0; i < len; ++i){
      if(str[i] != '0'){
         for (int j=1; (i + j) <= len; ++j){
            if (stoi(str.substr(i, j)) > x){
               count++;
            }
         }
      }
   }
   return count;
}
int main(){
   string str = "987";
   int x = 100;
   cout<<"Count of number of substrings with numeric value greater than X are: "<<greater_X(str, x);
   return 0;
}

出力

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

Count of number of substrings with numeric value greater than X are: 1

  1. C++の整数の文字列で6で割り切れる部分文字列の数

    整数文字列が与えられ、整数形式で6で割り切れる部分文字列の数を決定する必要がある問題を見ていきます。入力は、数値(整数)で構成される文字列の形式であることに注意してください。それでも、分割可能性チェックは整数のみと見なして実行されます(文字列入力のASC​​II値は使用されません)。 入力 str = “648” 出力 説明 サブストリング「6」、「48」、および「648」は6で割り切れる。 入力 str = “38342” 出力 4 説明 サブストリング「3834」、「342」、「834」、および「42」は6で割り切

  2. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &