Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 X보다 큰 숫자 값을 가진 부분 문자열의 개수 세기


0부터 9까지의 숫자 문자열이 제공됩니다. 문자열은 10진수를 나타냅니다. 목표는 숫자 X보다 큰 십진수를 나타내는 모든 하위 문자열을 찾는 것입니다. 조건은 하위 문자열이 0으로 시작하지 않아야 한다는 것입니다. 즉, "2021", "02", "021"에서. "0"은 포함되지 않습니다.

모든 부분 문자열의 첫 번째 값을 확인하여 이를 수행합니다. 값이 0보다 크면 stoi()를 사용하여 정수로 변환하여 해당 인덱스에서 부분 문자열을 만들기 시작합니다. If 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보다 큰 십진수를 형성하는 부분 문자열의 개수를 반환합니다.

  • 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