用 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
广告