문자열 검색 알고리즘은 더 큰 텍스트(문자열) 내에서 특정 패턴(하위 문자열)의 발생을 찾는 데 사용됩니다. 이 알고리즘은 텍스트 처리, 검색 및 조작 작업에서 중요한 역할을 합니다.
작동 방식
- 검색할 텍스트(문자열) 및 패턴(하위 문자열)으로 시작합니다.
- 한 번에 한 문자씩 텍스트를 반복합니다.
- 텍스트의 각 문자를 패턴의 첫 번째 문자와 비교합니다.
- 일치하는 경우 후속 문자도 패턴과 일치하는지 확인하십시오.
- 패턴이 완전히 일치하면 일치의 시작 위치를 기록합니다.
- 텍스트에서 패턴을 계속 검색합니다.
예
"ababcababcabcabc" 텍스트와 "abc" 패턴을 고려하십시오.
- 위치 0에서 시작합니다. "a"를 패턴의 첫 번째 문자 "a"와 비교합니다.
- 일치 항목이 발견되면 "b"와 "b", "c"와 "a"의 다음 문자로 이동합니다.
- "b"는 "a", "a"는 "b", "b"는 "c"와 계속 일치시킵니다.
- 위치 2에서 경기가 실패했습니다.
- 위치 3에서 다시 시작합니다. "a"를 패턴의 첫 번째 문자 "a"와 비교합니다.
- 성공적인 일치: "a"와 "a", "b"와 "b", "c"와 "c".
- 기록 위치 3.
패턴 "abc"는 위치 0, 6 및 9에서 찾을 수 있습니다.
C++의 예제 코드
#include <iostream>
#include <string>
#include <vector>
std::vector<int> stringSearch(const std::string& text, const std::string& pattern) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- pattern.length(); ++i) {
int j = 0;
while(j < pattern.length() && text[i + j] == pattern[j]) {
++j;
}
if(j == pattern.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "ababcababcabcabc";
std::string pattern = "abc";
std::vector<int> result = stringSearch(text, pattern);
std::cout << "Pattern found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
이 예에서 stringSearch
함수는 텍스트 "ababcababcabcabc" 내에서 패턴 "abc" 발생을 찾는 데 사용됩니다. 결과는 경기의 시작 위치를 포함하는 벡터입니다.