Boyer Moore 动态数组实现
Posted
技术标签:
【中文标题】Boyer Moore 动态数组实现【英文标题】:Boyer Moore dynamic array implementation 【发布时间】:2017-01-05 19:39:01 【问题描述】:我正在尝试实现 Boyer Moore(坏字符启发式)算法,但我想使用动态数组。谁能帮我解决这个问题?这是我的源代码。
**/* Program for Bad Character Heuristic of Boyer Moore String Matching Algorithm */
# include <limits.h>
# include <string.h>
# include <stdio.h>
# define NO_OF_CHARS 256
/* Driver program to test above funtion */
int main()
char txt[];
char pat[];
ifstream myfile;
string filename;
cout<<"input file"<<endl;
getline(cin, filename);
myfile.open(filename.c_str());
if(myfile.is_open())
cout<<"file not found"<<endl;
while(getline(myfile, txt))
cout<<txt<<endl;
cout<<"pls input pattern"<<endl;
cin.getline(pat[]);
search(txt, pat);
myfile.close();
else cout<<"file not found"<<endl:
return 0;
**
【问题讨论】:
char txt[];
-- 这不是有效的 C++。
我的意思是我的源代码中缺少的部分:
那么,问题是什么?
除非我想使用动态数组。 -- std::vector<char>
我的问题是如何在这段代码中实现一个动态数组?我从哪里开始?
【参考方案1】:
std::string 正是您在这种情况下所需要的。它的大小是动态的(因为在读入时它的大小是适当的)。只要确保在必要时使用 c_str() 成员函数传递 char* 指针部分。
【讨论】:
【参考方案2】:我在几天前就这样做了,如果您仍然需要答案...只需声明一个动态 char 数组并将其传递给函数。
这里的 char str 参数可以采用动态 char 数组,使用 badchar[NO_OF_CHARS] 数组可以在使用搜索功能之前实现坏字符启发式。
void badCharHeuristic(char *str, int badchar[NO_OF_CHARS])
int size = strlen(str);
int i;
for (i = 0; i < NO_OF_CHARS; i++)
badchar[i] = -1;
for (i = 0; i < size; i++)
badchar[str[i]] = i;
你的搜索功能也应该是这样的:
void search(char *txt, char *pat)
int s = 0; // s is the variable that hold how many shift we are gonna make
while (s <= (n - m))
int j = m - 1;
while (j >= 0 && pat[j] == txt[s + j])
j--;
if (j < 0)
printf("pattern occurs at shift = %d ", s);
s += (s + m < n) ? m - badchar[txt[s + m]] : 1; //if s+m < n; s = m - badchar[txt[s + m] else; s = 1
else
s += max(1, j - badchar[txt[s + j]]);
【讨论】:
嗨,海克,欢迎您。请考虑添加更多信息。以上是关于Boyer Moore 动态数组实现的主要内容,如果未能解决你的问题,请参考以下文章
多数投票算法(Boyer-Moore Algorithm)详解
Boyer–Moore Majority Vote Algorithm摩尔投票法,众数算法,Java
Boyer–Moore Majority Vote Algorithm摩尔投票法,众数算法,Java
python Boyer-Moore字符串搜索算法:Python实现
LeetCode 229 Majority Element II(主要元素II)(Array)(Boyer–Moore majority vote algorithm)