炫意html5
最早CSS3和HTML5移动技术网站之一

运行时提示string subscript of range

初学KMP,自己简单的实现了一下,编译没有问题,但是运行时终止了

代码如下:

#include<iostream>
#include<string>
using namespace std;
void GetNext(string& T, int* next)
{
int i = 0;
int j = -1;
next[0] = -1;
int tmp = T.size();
while (i < tmp)
{
//T[j]为前缀单个字符,T[i]为后缀单个字符
if ((j == -1) || (T[j] == T[i]))
{
++i;
++j;
next[i] = j;
}
else
{
//j回溯
j = next[j];
}
}
}
int GetKMP(string& X, string& T)
{
int* next = new int[100];
//i用于主串S当前位置的下标值
int i = 0;
//字串T中当前位置的下标值
int j = 0;
GetNext(T, next);
int tmp1 = T.size();
int tmp2 = X.size();
while ((i < tmp2) && (j < tmp1))
{
//两字母相等则继续
if ((j == -1) || (X[i] == T[i]))
{
++i;
++j;
}
else
{
j = next[j];
}
}
delete[] next;
if (j == tmp1)
{
return i - j;
}
else
{
return -1;
}
}
int main()
{
string X = "abcababca";
string T = "cababc";
cout << GetKMP(X, T) << endl;
return 0;
}

这个错误是要对string初始化吗?可是我在对形参的string初始化:string X=“”之后还是一样,到底是哪出了问题?

回答

//两字母相等则继续
	if ((j == -1) || (X[i] == T[i]))

这里的T[ i ] 应该是 T[ j ]:

//两字母相等则继续
	if ((j == -1) || (X[i] == T[j]))

炫意HTML5 » 运行时提示string subscript of range

Java基础教程Android基础教程