Неправильно обработан случай нескольких строк максимальной длины
Задание: "В векторе строк some_vector найдите самую длинную строку и её индекс. Выведите её в соответствии с форматом выходных данных. Если несколько строк имеют одинаковую длину, выведите первую из них."
При проверке кода выводится ошибка:
"причина: Неправильный ответ
подсказка: Неправильно обработан случай нескольких строк максимальной длины."
Сам код:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> some_vector = { "a", "b", "c", "d", "e", "f", "g" };
int longest_index = 0;
int current_index = 0;
int siz = some_vector[longest_index].size();
for (std::string el : some_vector) {
int siz1 = el.size();
if (siz1 > siz) {
longest_index = current_index;
}
current_index += 1;
}
std::cout << "Longest string \"" << some_vector[longest_index] << "\" at index " << longest_index;
}
Подскажите, в чём именно ошибка(
При собственных проверках проблемы со строками одной длины не возникает.
UPD: проблема решена: переменную siz нужно объявлять в цикле for, чтобы siz менялась вместе с longest_index, от которой она зависима, при каждом проходе цикла.
Итоговый корректный код:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> some_vector = { "a", "b", "c", "d", "e", "f", "g" };
int longest_index = 0;
int current_index = 0;
for (std::string el : some_vector) {
int siz = some_vector[longest_index].size();
int siz1 = el.size();
if (siz1 > siz) {
longest_index = current_index;
}
current_index += 1;
}
std::cout << "Longest string \"" << some_vector[longest_index] << "\" at index " << longest_index;
Источник: Stack Overflow на русском