封左 2021-06-12 12:11 采纳率: 100%
浏览 12
已采纳

运行时提示string subcript 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=“”之后还是一样,到底是哪出了问题?

  • 写回答

2条回答 默认 最新

  • 封左 2021-06-13 08:10
    关注

    这样是没问题的好像,我的错误应该是在

    把T[i]换为T[j]就好了,不过还是感谢您的建议

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序