Ошибка сегментации в C++ при использовании строковых векторов

Мой код предназначен для сайта онлайн-практики кодирования, я выполнял многие задачи, но, похоже, не могу обойти ошибку ошибки сегментации на этом.

Цель кода — найти строки самой длинной длины в векторе строк (длиной до 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 — вектор с 0 элементами.
463035818_is_not_a_number 11.12.2020 16:58

Вы действительно делаете слишком много работы.

PaulMcKenzie 11.12.2020 17:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
       longestStrings.clear();
       longestArrayCounter = 0;
       longestStrings[longestArrayCounter++] = inputArray[i];

плохо, потому что вы выполняете назначение несуществующему элементу.

Вместо двух

longestStrings[longestArrayCounter++] = inputArray[i];

ты должен сделать

longestStrings.push_back(inputArray[i]);

Затем std::vector будет управлять размером за вас, так что вам не придется управлять longestArrayCounter самостоятельно. Используйте longestStrings.size(), чтобы получить размер.

Другие вопросы по теме