如何解决字符串输入长度大于4会给出分段错误
问题在于,此代码对于大小为4的输入字符串效果很好,但是对于大小大于4的输入字符串,则会产生分段错误。
问题是检查一个字符串在另一个字符串中所有字谜的索引。
例如:对于字符串1输入abab
和字符串2输入ab
-效果很好,但是对于BACDGABCDA
和ABCD
则给出了分段错误。
#include<bits/stdc++.h>
using namespace std;
void anagram(string s,string p) {
int k = p.length();
string temp = "";
vector<int> v;
int j = 0;
for(int i = 0;i<p.length();i++) {
temp += s[i];
}
sort(temp.begin(),temp.end());
for(int i = p.length();i<s.length();i++) {
if(temp == p && i == p.length()) {
v.push_back(i-k+1);
continue;
}
temp.erase(temp.begin()+(i-k));
temp += s[i];
sort(temp.begin(),temp.end());
if(temp == p) {
v.push_back(i-k+1);
}
}
for (auto& it : v) {
cout << it << ' ';
}
}
int main() {
// This is to find the starting index of all anagrams in a string.
string s = "BACDGABCDA";
string p = "ABCD";
anagram(s,p);
return 0;
}
解决方法
您的字符串temp的长度始终为4。变量k为const 4.变量i从4开始,一直上升到9。因此,在某些迭代之后,您尝试在字符串temp结束后擦除元素。
使用调试器或在代码中添加一些其他检查将比仅询问其他问题提供更快的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。