-1

请帮我找出这段代码中的错误。我写了一个简单的程序,通过Aho-Corasick算法添加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;
}
4

1 回答 1

0

我对算法一无所知,所以我不知道它是否运行正确。但是,仅基于通过 gdb 运行代码,您需要从trie向量中的至少一个元素开始。你可以通过写来做到这一点

vector <item> trie(1);

其中1表示向量应该从多少个元素开始。通过这种更改,代码运行良好(但我不知道它是否正确运行算法)。

于 2013-03-23T15:50:46.690 回答