Boyer-Moore-坏字符规则实现子字符串搜索
Boyer Moore - Bad character rule implementation substring search
我正试图用2D数组从boyer moore中实现坏字符规则,用于子字符串搜索,我遇到了这样的场景:我看到我的arr[0]与arr[1][0]重叠,这导致了问题。我试着浏览VS中的代码,如果我查看内存位置,它实际上显示了正确的值,但在打印时我不确定这种重叠是如何发生的。有人能帮我理解我做错了什么吗?
错误输出j的值为---0
新条目是---f 102 13
内部while循环--102 13
内部while循环--13-1//13的重叠是否发生y
# define ROWS 20
# define COLUMNS 1
int main(void)
{
string str = "firstcharacter";
int strlength = str.length();
int arr[ROWS][COLUMNS];
memset(arr, -1, sizeof(arr[0][0]) * ROWS * COLUMNS);
for (int i = 0; i < strlength; i++)
{
int j = 0;
bool flag = false;
// check till point previous character was inserted
while (arr[j][1] != -1)
{
// if previous character is already present
// just update value dont insert character
if (arr[j][0] == str[i])
{
flag = true;
break;
}
j++;
}
if (flag == true)
{
int value = strlength - i - 1;
arr[j][1] = value;
cout << " Old entry is --- " << str[i] << " " << arr[j][0] << " " << arr[j][1] << endl << endl;
}
else
{
int value = strlength - i - 1;
arr[j][0] = str[i];
arr[j][1] = value;
cout << " New entry is --- " << str[i] << " "<< arr[j][0] << " " << arr[j][1] << endl << endl;
}
for (int x = 0; x < strlength; x++)
{
cout << " Inside while loop -- " << arr[x][0] << " " << arr[x][1] << endl; // --- error case after first iteration only I see value overlapping
}
}
cout << endl << endl << endl << endl;
for (int i = 0; i < strlength; i++)
{
cout << " final table is " << arr[i][0] << " " << arr[i][1] << endl;
}
return 0;
}
因为COLUMNS
就是1
。ary[j][1]
和ary[j+1][0]
将指向相同的内存地址,尽管第一个在技术上是未定义的行为,因为[1]
下标超出范围,
相关文章:
- 哪个更快:在 1d 向量中按字符串搜索还是在 2d 向量中按向量搜索?
- 有序地图字符串搜索与整数搜索之间的时间复杂度
- 使用图形的字符串搜索算法?C++
- C++子字符串搜索 - 跳入C++
- 字符串搜索 - 并行版本较慢
- 使用Robert Sedwick书中的符号表进行字符串搜索
- C++中的部分字符串搜索
- 哪个是更好的字符串搜索算法?Boyer-Moore或Boyer Moore Horspool
- 如何使用 c++ 将字符串搜索到字符串数组中
- 使用 C++ 在文件中进行字符串搜索/索引
- Qt5 中字符串搜索的最佳容器
- 优化.txt文件中的字符串搜索
- 字符串搜索输入中包含的单词
- Boyer-Moore-坏字符规则实现子字符串搜索
- 带星号*通配符的字符串搜索
- c++字符串搜索函数
- 最好的字符串搜索算法
- 通配符字符串搜索算法
- 在c++中使用字符串(搜索字符串,分割字符串,cout<<字符串)
- Strstr()函数重叠字符串搜索