C++에서는 표준 문자열 라이브러리의 함수들을 활용하여 손쉽게 문자열 일치(matching) 작업을 수행할 수 있습니다. 이 글에서는 find() 함수를 사용해 메인 문자열 안에서 특정 부분 문자열(substring)이 나타나는 모든 위치를 찾는 방법을 살펴봅니다.
find() 함수는 해당 문자열이 처음으로 발견된 위치를 반환합니다. 따라서 이 함수를 반복적으로 호출하면 문자열 내의 모든 일치 지점을 찾아낼 수 있습니다. 만약 문자열을 찾았다면 그 위치(index)를 반환하고, 찾지 못했다면 string::npos를 반환합니다.
입력: 메인 문자열 "aabbabababbbaabb", 부분 문자열 "abb" 출력: 부분 문자열이 발견된 위치 [1, 8, 13]
알고리즘
String_Find(main_str, sub_str)
입력 − 검색 대상이 되는 메인 문자열과 찾고자 하는 부분 문자열
출력 − 메인 문자열 내에서 부분 문자열이 발견된 모든 위치
pos := 0 while (index = str에서 pos부터 문자열 끝까지 범위 내 sub_str의 첫 번째 등장 위치) do 일치가 존재하므로 index 출력 pos := index + 1 done
예제 코드
#include<iostream>
using namespace std;
main() {
string str1 = "aabbabababbbaabb";
string str2 = "abb";
int pos = 0;
int index;
while((index = str1.find(str2, pos)) != string::npos) {
cout << "Match found at position: " << index << endl;
pos = index + 1; // 새 탐색 시작 위치는 발견된 index의 다음 요소부터
}
}실행 결과
Match found at position: 1 Match found at position: 8 Match found at position: 13