请帮我找到这段代码中的错误。我写了一个简单的程序,通过Aho-Corasick算法为trie添加了n个字符串,但它无法正常工作。输入字符串后崩溃。这段代码出了什么问题?
#include <cstdlib>
#include <iostream>
#include <vector>
#define ALPHABET 26
using namespace std;
struct item
{
int next[ALPHABET];
int leaf;
item()
{
for (int i = 0; i < ALPHABET; i++)
next[i] = -1;
leaf = 0;
}
};
vector <item> trie;
int add_string(string &s)
{
int z = 0;
item temp;
for (int i = 0; i < s.length(); i++)
{
char c = s[i] - 'a';
if (trie[z].next[c] == -1)
{
trie[z].next[c] = trie.size();
trie.push_back(temp);}
z = trie[z].next[c];
}
trie[z].leaf = true;
}
}
int main(int argc, char *argv[])
{
int n;
cin >> n;
string s[n];
for (int i = 0; i < n; i++)
cin >> s[i];
for (int i = 0; i < n; i++)
add_string(s[i]);
system("PAUSE");
return EXIT_SUCCESS;
}
答案 0 :(得分:0)
我对算法一无所知,所以我不知道它是否正常运行。但是,仅仅基于通过gdb运行代码,您需要从trie
向量中的至少一个元素开始。你可以写
vector <item> trie(1);
其中1
表示向量应该从多少元素开始。通过这种更改,代码运行正常(但我不知道它是否正确运行算法)。