以下函数用于计算与字符串本身匹配的字符串-a [k]的所有可能后缀的数字字符 . 例如对于abaabab,后缀:abaabab,baabab,aabab ..和匹配字符:7,0,1 ..
但是我收到消息的运行时错误 - Segmentation fault(core dumped) . 有人可以告诉我代码有什么问题吗?
// a是全局声明的字符串数组,k是正在处理的当前字符串的索引
long long stringSimilarity(string s1,long long c,int k) // k is the index no of the string
{
string s3=a[k];
string s2;
long long i;
if(s1.length() == 1) return c;
if(s1.length() == 0) return -1;
s2=s1.substr(1,s1.length()-1);
i=0;
while((s2[i] == s3[i]) && (i<s2.length())) ++i;
c+=i;
c=stringSimilarity(s2,c,k);
return (c);
}
//在打印答案之前,将[k] .length的值添加到返回的int值中
2 回答
这条线是一个主要问题,导致undefined behavior:
原因是
s2
永远不会被初始化,并且是空的,因此对它的任何索引都将超出范围 .我建议您使用this list of possible std::string constructors中的第二个替代方案 .
编辑后,您遇到以下问题:
该行的问题在于,在将索引
i
用作s2
的索引之后检查索引i
,从而再次超出范围 . 您还应该再次检查i
的长度s3
.最可能的罪魁祸首就在这条线上:
您正在尝试修改空字符串
s2
的符号 . 你想做的事情可以通过以下方式完成:没有任何循环 . 如果我理解你正在尝试做的正确 .