字符串匹配算法试图纠正它
String matching algorithm trying to correct it
我试图做字符串匹配算法的蛮力方法。但是算法不能正常工作,我得到一个超出边界的索引错误。
这是我的算法
int main() {
string s = "NOBODY_NOTICED_HIM";
string pattern="NOT";
int index = 0;
for (int i = 0; i < s.size();)
{
for (int j = 0; j < pattern.size();)
{
if(s[index] == pattern[j])
{
j++;
i++;
}
else
{
index = i;
j = 0;
}
}
}
cout<<index<<endl;
return 0;
}
固定版本修复了越界异常。我不知道这个算法是否适用于不同的字符串
int main() {
string s = "NOBODY_NOTICED_HIM";
string pattern="NOT";
int index = 0;
int i = 0;
while( i < s.size())
{
i++;
for (int j = 0; j < pattern.size();)
{
if(s[index] == pattern[j])
{
index++;
j++;
cout<<"i is " <<i << " j is "<<j <<endl;
}
else
{
index = i;
break;
}
}
}
cout<<i<<endl;
return 0;
}
因为内部for循环有一个条件,当j
小于pattern.size()
时循环,但您也在主体内增加i
。当i
超出s.size()
的边界时,index
也会超出边界,你会得到一个OutOfBounds错误。
暴力破解方法必须用每个可能的子序列测试模式。主要条件是长度,长度必须相同。s的所有子序列为:
[‘大人物’,‘鄂博’,‘人’,‘这里’,‘DY_’,"推出",没有,‘不’,‘OTI’,抽搐,'ICE', 'CED', 'ED ', 'D_H', '_HI', 'HIM']
有很多方法可以做到,你可以一个字符一个字符地做,或者使用字符串操作,比如接受子字符串。都是很好的学习练习。
从s字符串的0开始,取前三个字符,与模式比较,如果相等,则给出答案。否则继续移动到从1开始的字符,等等。
相关文章:
- 基于ELO的团队匹配算法
- 在(任意大)流中搜索完全匹配的字符串 - C++
- 对于字符串/句子不起作用的最接近的匹配算法
- 无法使用 regex_search 匹配子字符串
- 用于多个级联字符串的同步模式匹配算法
- CAtlRegExp:匹配一个字符串直到十六进制集
- 为什么比较两个字符串的结果遗漏了最后匹配的字符串
- 我应该用什么来实现c++中的加权二分匹配算法
- 搜索字符串(只查找完全匹配的字符串,不忽略大写或小写字符
- 提高准确性的最佳图像匹配算法
- 游戏的匹配算法
- 如何在 boost::regex 中找到子匹配的字符串位置
- openCV立体匹配算法(立体BM和立体SGBM)是否可以处理垂直校正图像
- 错误 C2308:连接不匹配的字符串
- 字符串匹配算法的c++实现
- 有一个不匹配的字符串的算法
- 字符串匹配算法
- 字符串完成和匹配算法
- 字符串匹配算法试图纠正它
- 字符串匹配算法的大O符号