find()子串查找
str.find("需要查找的字符串") 返回匹配成功的下标,没有返回string::npos
str.find("查找子串",起始位置(下标))
find (const char* s, size_t pos, size_t n)
replace 替换
s.replace(s.begin(), s.begin() + 长度, "替换内容"); //通过迭代器,指示被替换的位置
s.replace(起始下标, 替换长度, "替换内容"); //通过索引及长度,指示被替换的位置
substr()字符串截取
str.substr(起始下标,截取长度)
kmp
kmp模板
s【】数组是长文本 p【】是要匹配的子串
字符数组的存储都是从下标1开始,匹配成功返回s数组开始匹配的下标 i-j+1
ne【i】表示 p 的长度为 i 的前缀中的前缀和后缀相等的最大值
for (int i = 2, j = 0; i <= m; i ++ )
{
while (j && p[i] != p[j + 1]) j = ne[j];
if (p[i] == p[j + 1]) j ++ ;
ne[i] = j;
}
for (int i = 1, j = 0; i <= n; i ++ )
{
while (j && s[i] != p[j + 1]) j = ne[j];
if (s[i] == p[j + 1]) j ++ ;
if (j == m)
{
a.push_back(i-j+1);
j = ne[j];
}
}