使用字符串向量时 C++ 中的分段错误
Segmentation Fault in C++ while using string vectors
我的代码用于一个在线编码练习网站,我一直在做很多挑战,但我似乎无法解决这个问题上的分段错误错误。
代码的目的是在字符串向量中找到最长的字符串(最多 10 个字符串),然后 return 一个只包含这些最长字符串的字符串向量。
我相信我的代码在逻辑上是可行的,但我无法对其进行测试。我对向量还是陌生的,所以似乎无法正确理解这里关于我的问题的其他答案。
vector<string> allLongestStrings(vector<string> inputArray) {
vector<string> longestStrings; // vector
int longest_size = longestStrings.size(); // int
int longestArrayCounter = 0; // int. For filling longestStrings whenever
// there is a long string
int longest_string = 0; // int. For recording the size of the longest string
for (int i = 0; i < inputArray.size(); i++) {
// Loop will:
//1. Measure size of string in input array
//2. if longest will change value of longest_string and clear longestStrings
//3. If the same length as longest_string will add it to longestStrings vector
//4. if it is shorter it will be ignored
if (inputArray[i].size() > longest_string) { // input vector
longest_string = inputArray[i].size(); // vector
longestStrings.clear(); //clearing the vector to only store longest string values
longestArrayCounter = 0; //reset counter for longestStrings
longestStrings[longestArrayCounter++] = inputArray[i];//puts new longest string from input into my vector
}
if (inputArray[i].size() == longest_string) {
longestStrings[longestArrayCounter++] =inputArray[i];// my vector and input vector
}
}
return longestStrings;
}
longestStrings.clear();
longestArrayCounter = 0;
longestStrings[longestArrayCounter++] = inputArray[i];
不好,因为您正在对不存在的元素进行赋值。
而不是两个
longestStrings[longestArrayCounter++] = inputArray[i];
你应该做的
longestStrings.push_back(inputArray[i]);
然后,std::vector
会为您管理尺寸,因此您不必自己管理longestArrayCounter
。使用longestStrings.size()
获取大小。
我的代码用于一个在线编码练习网站,我一直在做很多挑战,但我似乎无法解决这个问题上的分段错误错误。
代码的目的是在字符串向量中找到最长的字符串(最多 10 个字符串),然后 return 一个只包含这些最长字符串的字符串向量。
我相信我的代码在逻辑上是可行的,但我无法对其进行测试。我对向量还是陌生的,所以似乎无法正确理解这里关于我的问题的其他答案。
vector<string> allLongestStrings(vector<string> inputArray) {
vector<string> longestStrings; // vector
int longest_size = longestStrings.size(); // int
int longestArrayCounter = 0; // int. For filling longestStrings whenever
// there is a long string
int longest_string = 0; // int. For recording the size of the longest string
for (int i = 0; i < inputArray.size(); i++) {
// Loop will:
//1. Measure size of string in input array
//2. if longest will change value of longest_string and clear longestStrings
//3. If the same length as longest_string will add it to longestStrings vector
//4. if it is shorter it will be ignored
if (inputArray[i].size() > longest_string) { // input vector
longest_string = inputArray[i].size(); // vector
longestStrings.clear(); //clearing the vector to only store longest string values
longestArrayCounter = 0; //reset counter for longestStrings
longestStrings[longestArrayCounter++] = inputArray[i];//puts new longest string from input into my vector
}
if (inputArray[i].size() == longest_string) {
longestStrings[longestArrayCounter++] =inputArray[i];// my vector and input vector
}
}
return longestStrings;
}
longestStrings.clear();
longestArrayCounter = 0;
longestStrings[longestArrayCounter++] = inputArray[i];
不好,因为您正在对不存在的元素进行赋值。
而不是两个
longestStrings[longestArrayCounter++] = inputArray[i];
你应该做的
longestStrings.push_back(inputArray[i]);
然后,std::vector
会为您管理尺寸,因此您不必自己管理longestArrayCounter
。使用longestStrings.size()
获取大小。