Мой код предназначен для сайта онлайн-практики кодирования, я выполнял многие задачи, но, похоже, не могу обойти ошибку ошибки сегментации на этом.
Цель кода — найти строки самой длинной длины в векторе строк (длиной до 10 строк), а затем вернуть вектор строк, содержащий только эти самые длинные строки по порядку.
Я считаю, что логически мой код работает, но я не могу его проверить. Я все еще новичок в векторах, поэтому не могу правильно понять другие ответы здесь в отношении моей проблемы.
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()
, чтобы получить размер.
longestStrings
— вектор с0
элементами.