исключение std :: out_of_range при сравнении строк - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь использовать функцию сравнения std :: string.Вот мой код:

int main() {
    string str1 = {"apple"};
    vector<string> vec1 = {"apple"};
    string suffix = {"le"};

    if (str1.compare(str1.size() - suffix.length(), suffix.length(), suffix) == 0)
        cout << "Yes!!" << endl;         // This prints

    if (vec1[0].compare(vec1[0][vec1[0].size() - suffix.length()], suffix.length(), suffix) == 0)
        cout << "Yes-1!!" << endl;       // This doesn't
}

Вывод:

Yes!!
terminate called after throwing an instance of 'std::out_of_range'
what():  basic_string::compare: __pos (which is 108) > this->size() (which 
is 5)
Aborted (core dumped)

Нужна помощь, чтобы понять, что я делаю не так.Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Я изменил ваш второй вызов на compare() на это:

if (vec1[0].compare(vec1[0].size() - suffix.length(), suffix.length(), suffix) == 0)

, поскольку было неясно, чего вы пытаетесь достичь в исходном вызове.

Это полный код, который работает без выдачи ошибки:

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int main() {
    string str1 = {"apple"};
    vector<string> vec1 = {"apple"};
    string suffix = {"le"};

    if (str1.compare(str1.size() - suffix.length(), suffix.length(), suffix) == 0)
        cout << "Yes!!" << endl;         // This prints

    if (vec1[0].compare(vec1[0].size() - suffix.length(), suffix.length(), suffix) == 0)
        cout << "Yes-1!!" << endl;       // This doesn't
}

Также остерегайтесь публикации с опечатками в коде, поскольку комментарий к вопросу уже отмечен.

...