O algoritmo de busca de string é usado para encontrar ocorrências de um padrão específico(substring) dentro de um texto maior(string). Esse algoritmo desempenha um papel crucial nas tarefas de processamento, pesquisa e manipulação de texto.
Como funciona
- Comece com um texto(string) e um padrão(substring) para pesquisar.
- Percorra o texto um caractere por vez.
- Para cada caractere do texto, compare-o com o primeiro caractere do padrão.
- Se houver correspondência, verifique se os caracteres subsequentes também correspondem ao padrão.
- Se o padrão corresponder completamente, registre a posição inicial da correspondência.
- Continue procurando o padrão no texto.
Exemplo
Considere um texto: "ababcababcabcabc" E um padrão: "abc"
- Comece na posição 0. Compare "a" com o primeiro caractere "a" no padrão.
- Correspondência encontrada, passe para os próximos caracteres: "b" com "b" e "a" com "c".
- Continue combinando: "b" com "a", "a" com "b" e "b" com "c".
- A correspondência falhou na posição 2.
- Comece novamente na posição 3. Compare "a" com o primeiro caractere "a" no padrão.
- Correspondência bem-sucedida: "a" com "a", "b" com "b" e "c" com "c".
- Posição do registro 3.
O padrão "abc" é encontrado nas posições 0, 6 e 9.
Exemplo de código em 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;
}
Neste exemplo, a stringSearch
função é utilizada para encontrar ocorrências do padrão "abc" dentro do texto "ababcababcabcabc". O resultado será um vetor contendo as posições iniciais das partidas.