“terminate called after throwing an instance of ‘std::out_of_range‘“

单词接龙(组成一个序列连接起来)

    • 题目
    • 爆搜可枚举序列⭐⭐⭐
    • 按顺序连接若干单词(删去重叠部分)
    • 一个访问越界error

题目

8783:单词接龙

爆搜可枚举序列⭐⭐⭐

无论是 还原文件还是单词接龙,在想要求某个组合时,因为不明白 文件碎片/单词 的排列顺序,需要深搜枚举序列
尤其这题,每个单词可用两遍,更是直指搜索
因为爆搜可以抉择每个单词用几遍

按顺序连接若干单词(删去重叠部分)

#include  
#include  
#include  
using namespace std;
const int N=55;
int next[N];
void getnext(string p){int len=p.size();int i=0;int j=-1;next[0]=-1;while(i<len){if(j==-1||p[i]==p[j]){i++,j++;next[i]=j;}else j=next[j];}
}
int kmp(string t,string p,int st){int lt=t.size();int lp=p.size();int i=st;int j=0;while(i<lt){if(j==-1||t[i]==p[j]){i++,j++;}else j=next[j];
//		if(j==lp){//算是abcdefg  efg,所以返回得j是lp 
//		cout<
//		j=next[j];//回溯到p【0】
//		}	
//否则,abcdefg fghijk ,返回得j是2(g对应得下标+1) }	
return j; }
signed main(){
//	ios::sync_with_stdio(false);
//	cin.tie(0);int n;cin>>n;string str="";string t="";getline(cin,str);cin>>t;	for(int i=1;i<n;i++){cin>>str;getnext(str);int len=str.size();
//		int st=max(0,(t.size())-len);int st=t.size()-len;st=max(st,0);int pos=kmp(t,str,st);cout<<pos<<endl;t+=str.substr(pos,len-pos+1);cout<<t<<endl;} cout<<t.size();return 0;
}

笑死,看到题目不知道干了啥
自己臆想了一个题目属于是
最难理解得是kmp中返回得j,j指向得是模式串与主串中不匹配得第一个字符
如若一个都不匹配,最后返回得就是下标0(从-1加过来得)
写的时候,return t 放在了 while(i

一个访问越界error

C++如果遇到:

  • 1.“terminate called after throwing an instance of ‘std::out_of_range’”

  • 2.“Abort message: 'terminating with uncaught exception of type std::out_of_range”

这样的错误,极有可能是访问越界的问题。

导致越界的原因:

通常情况是在使用c++的容器的时候出现的问题,如在使用vector、map、还有string(差点忘记string也是个容器呀)等的时候出现的


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部