Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 문자열 라이브러리를 활용한 부분 문자열 일치 프로그램

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