从函数返回向量是否会产生任何问题?或者只是一些基本的语法问题?
这只是来自CLRS的示例代码。 computePrefix函数计算给定模式的正确前缀的值,并匹配main函数中的值。
使SIGSEGV错误更精确。你的善意建议真的很有帮助。
谢谢。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string text, pattern;
vector<int> computePrefixFunction(string p);
cin >> text;
cin >> pattern;
int n = text.length();
int m = pattern.length();
vector<int> pi = computePrefixFunction(pattern);
int q = -1;
for(int i = 0; i < n; ++i)
{
while(q > -1 && pattern[q+1] != text[i])
q = pi[q];
if(pattern[q+1] == text[i])
q = q + 1;
if(q == (m-1))
{
cout << "Pattern occurs from position: " << q - m + 1 << '\n';
q = pi[q];
}
}
return 0;
}
vector<int> computePrefixFunction(string p)
{
int m = p.length();
vector<int> pi;
pi[0] = -1;
int k = -1;
for(int q = 0; q < m; ++q)
{
while(k > -1 && p[k+1] != p[q])
k = pi[k];
if(p[k+1] == p[q])
k = k + 1;
pi[q] = k;
}
return pi;
}
答案 0 :(得分:1)
要使用vector
,请push_back
向其中添加元素。如果您只是初始化它而没有像computePrefixFunction
第二行那样的大小,那么尝试访问pi[0]
或pi[q]
会给您一个运行时错误。相反,请pi.push_back(value)
。