用 C++ 统计数值大于 X 的子字符串数量


给定一个由数字 0 到 9 组成的字符串。该字符串表示一个十进制数。目标是找到所有表示十进制数且大于数字 X 的子字符串。条件是子字符串不能以 0 开头。例如,在“2021”中,“02”、“021”、“0”将不被包含。

我们将通过检查所有子字符串的第一个值来实现这一点,如果它大于 0,则从该索引开始创建子字符串,并使用 stoi() 将其转换为整数。如果子字符串 > 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) 获取字符串及其长度,并返回形成大于 X 的十进制数的子字符串的数量。

  • 使用 FOR 循环遍历字符串

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

  • 如果任何 str[i]!=’0’,则表示从它开始的所有子字符串都将有效。

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

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

更新于: 2020-08-31

237 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告