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