计算C ++中数字值大于X的子字符串的数量

我们给了一个数字字符串0到9。该字符串代表一个十进制数字。目的是找到代表大于十进制数字X的十进制数字的所有子字符串。条件是子字符串不应以0开头。即“ 2021”,“ 02”,“ 021”。“ 0”将不包括在内。

我们将通过检查所有子字符串的第一个值(如果该值大于0)来实现此目的,然后通过使用将其转换为整数,从该索引开始创建子字符串stoi()。如果substring> X递增计数。

让我们通过示例来理解。

输入-str =“ 123” X = 12

输出-数值大于X的子字符串的数量为-2

说明子字符串> 12是123和23。

输入-str =“ 111” X = 100

输出-二进制字符串中偶数十进制值子字符串的计数为-1

说明仅111大于100。

以下程序中使用的方法如下

  • 我们只将字符串str作为数字字符串。

  • 将str的长度存储在len = str.length()中

  • 函数Greater_X(string str,int x)接受字符串及其长度,并返回形成大于10的十进制数的子字符串计数。

  • 使用FOR循环遍历字符串

  • 从索引i = 0到i <len,从左到右读取。

  • 如果有任何str [i]!='0',则所有从其开始的子字符串均有效。

  • 对于子串的长度,从索引j = 1到i + j <len。

  • 使用将子字符串str.substr(i,j)转换为十进制stoi()。如果大于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