大于 4 的字符串输入长度给出分段错误
String input length greater than 4 gives segmentation fault
问题是此代码适用于大小为 4 的输入字符串,但对于大小超过 4 的输入字符串会出现分段错误。
问题是检查一个字符串的所有字谜在另一个字符串中的索引。
例如:对于 string1 输入 abab
和 string2 输入 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 结束后的元素。
使用调试器或在您的代码中添加一些额外的检查将比仅仅询问其他人更快地回答此类问题。
问题是此代码适用于大小为 4 的输入字符串,但对于大小超过 4 的输入字符串会出现分段错误。
问题是检查一个字符串的所有字谜在另一个字符串中的索引。
例如:对于 string1 输入 abab
和 string2 输入 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 结束后的元素。
使用调试器或在您的代码中添加一些额外的检查将比仅仅询问其他人更快地回答此类问题。