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

C++ 프로그램에서 주어진 문자열로 시작하고 끝나는 문자열의 다른 부분 문자열

<시간/>

이 튜토리얼에서는 주어진 문자열로 시작하고 끝나는 부분 문자열의 총 개수를 찾는 프로그램을 작성할 것입니다.

하나의 문자열과 두 개의 하위 문자열이 제공됩니다. 주어진 두 부분 문자열로 시작하고 끝나는 다른 부분 문자열 수를 찾아야 합니다. 예를 들어 보겠습니다.

입력

str = "getmesomecoffee"
start = "m"
end = "e"

출력

6

주어진 문자열에는 총 6개의 다른 하위 문자열이 있습니다. me, mesome, mesomememecoffe, mesomemecoffee, mecoff, mecoffee입니다.

문제를 해결하는 단계를 살펴보겠습니다.

  • 문자열을 초기화합니다.

  • str을 반복하고 시작 및 끝 부분 문자열 인덱스를 찾습니다. 별도의 배열에 저장하십시오.

  • 다른 하위 문자열을 저장하도록 세트를 초기화합니다.

  • str을 반복합니다.

    • 현재 인덱스가 이전에 생성한 배열의 시작 문자열과 일치하는지 확인합니다.

    • 시작 문자열 인덱스를 찾았으면 끝 문자열을 검색합니다.

    • 변수의 끝을 찾을 때까지 모든 문자열을 추가합니다.

    • 끝 문자열을 찾으면 하위 문자열 수를 늘리고 하위 문자열을 집합에 추가합니다.

    • 하위 문자열 변수를 재설정합니다.

  • 부분 문자열 수를 인쇄합니다.

코드를 봅시다.

#include <bits/stdc++.h>
using namespace std;
int getSubstringsCount(string str, string start, string end) {
   int substrings_count = 0, str_length = str.size(), start_length = start.size(), end_length = end.size();
   int start_matches_index[str_length] = {0}, end_matches_index[str_length] = {0};
   for (int i = 0; i < str_length; i++) {
      if (str.substr(i, start_length) == start) {
         start_matches_index[i] = 1;
      }
      if (str.substr(i, end_length) == end) {
         end_matches_index[i] = 1;
      }
   }
   set<string> substrings;
   string current_substring = "";
   for (int i = 0; i < str_length; i++) {
      if (start_matches_index[i]) {
         for (int j = i; j < str_length; j++) {
            if (!end_matches_index[j]) {
               current_substring += str[j];
            }
            if (end_matches_index[j]) {
               current_substring += str.substr(j, end_length);
               if (substrings.find(current_substring) == substrings.end()) {
                  substrings_count++;
               }
               substrings.insert(current_substring);
            }
         }
         current_substring = "";
      }
   }
   return substrings_count;
}
int main() {
   string str = "getmesomecoffee";
   string start = "m";
   string end = "e";
   cout << getSubstringsCount(str, start, end) << endl;
   return 0;
}

출력

위의 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

6

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.