Как я должен ловить исключения out_of_range? - PullRequest
0 голосов
/ 13 февраля 2020

Я получаю out_of_range в моем коде. Как мне это исправить? Есть 2 функции. Первая функция проверяет строку, если это палиндром. Вторая функция должна найти палиндромы из вектора и скопировать его в новый вектор, который является возвращаемым значением.

#include "pch.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

bool IsPalindrom(string a)
{   
    string b = a;

    reverse(a.begin(), a.end());

    if (b == a)
    {
         cout << "success " << endl;
         return true;
    }
    else {
        cout << "error";
        return false;
    }
}

vector<string> PalindromFilter(vector<string> words, int minLength)
{
    vector<string> pol;

    for (int i = 0; i <= words.size(); ++i)
    {
        if (IsPalindrom(words[i]) && words[i].size() > minLength)
        {
            pol.at(i) = words.at(i);
        }
    }
    return pol;
}

int main()
{
    vector<string> a = { "ama", "madam", "safg", "arnold", "dad", "dd" };

    PalindromFilter(a, 2);

}

Ответы [ 2 ]

5 голосов
/ 13 февраля 2020

Вы получаете доступ к words вне диапазона в l oop. Также pol пусто, поэтому вам нужно использовать push_back для добавления новых элементов.

vector<string> pol;

for (int i = 0; i < words.size(); ++i)
{
    if (IsPalindrom(words[i]) && words[i].size() > minLength)
    {
        pol.push_back(words.at(i));
    }
}
return pol;
2 голосов
/ 13 февраля 2020

Вы можете поймать исключение с помощью блока try catch:

try{
PalindromFilter(a, 2);
}
catch(const std::out_of_range& e){
  //std::cout <<"Error: "  << e.what(); //to print the exception description
  //or do whatever
}

Однако это не заставит вашу программу работать должным образом, вам нужно решить проблемы Palindrome метода.

В вашем for l oop на последней итерации ваш words векторный доступ равен out_of_bounds . Используйте < вместо <=.

Это: pol.at(i) = words.at(i); недопустимо, pol.at(i) не существует, пока для него не выделена память, вы можете использовать метод vector push_back(), pol.push_back(words[i]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...