이 튜토리얼에서는 주어진 문자열로 시작하고 끝나는 부분 문자열의 총 개수를 찾는 프로그램을 작성할 것입니다.
하나의 문자열과 두 개의 하위 문자열이 제공됩니다. 주어진 두 부분 문자열로 시작하고 끝나는 다른 부분 문자열 수를 찾아야 합니다. 예를 들어 보겠습니다.
입력
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
결론
튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.