Алгоритм поиска строки используется для поиска вхождений определенного шаблона(подстроки) в большом тексте(строке). Этот алгоритм играет решающую роль в задачах обработки текста, поиска и манипулирования.
Как это работает
- Начните с текста(строки) и шаблона(подстроки) для поиска.
- Перебирайте текст по одному символу за раз.
- Для каждого символа в тексте сравните его с первым символом шаблона.
- Если есть совпадение, проверьте, соответствуют ли последующие символы шаблону.
- Если шаблон полностью совпал, запишите начальную позицию совпадения.
- Продолжайте искать закономерность в тексте.
Пример
Рассмотрим текст: "ababcababcabcabc" и шаблон: "abc"
- Начните с позиции 0. Сравните «а» с первым символом «а» в образце.
- Совпадение найдено, переходим к следующим символам: "b" с "b" и "a" с "c".
- Продолжайте сопоставлять: «b» с «a», «a» с «b» и «b» с «c».
- Матч не удался на позиции 2.
- Начните снова с позиции 3. Сравните «а» с первым символом «а» в образце.
- Успешное совпадение: "a" с "a", "b" с "b" и "c" с "c".
- Запись позиции 3.
Образец «abc» находится в позициях 0, 6 и 9.
Пример кода на С++
#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
функция используется для поиска вхождений шаблона «abc» в тексте «ababcababcabcabc». Результатом будет вектор, содержащий начальные позиции совпадений.