字符串搜索算法用于查找较大文本(字符串)中特定模式(子字符串)的出现。 该算法在文本处理、搜索和操作任务中发挥着至关重要的作用。
怎么运行的
- 从要搜索的文本(字符串)和模式(子字符串)开始。
- 一次一个字符地遍历文本。
- 对于文本中的每个字符,将其与模式的第一个字符进行比较。
- 如果存在匹配,则检查后续字符是否也与该模式匹配。
- 如果模式完全匹配,则记录匹配的起始位置。
- 继续寻找文本中的模式。
例子
考虑一个文本:“ababcababcabcabc”和一个模式:“abc”
- 从位置 0 开始。将“a”与模式中的第一个字符“a”进行比较。
- 找到匹配项,移至下一个字符:“b”与“b”,“a”与“c”。
- 继续匹配:“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”的出现情况。 结果将是一个包含匹配起始位置的向量。