Показывает компилятор: Abort Called - PullRequest
0 голосов
/ 14 октября 2019

Когда компилятор C ++ выдает это сообщение: "завершить вызов после выброса экземпляра 'std :: out_of_range'"? Я пытался эту проблему на сайте. Я написал алгоритм, но код не скомпилируется.

enter image description here

Я написал следующий алгоритм:

int stringSimilarity(string s) {
int size=s.size(), sum=0;

for(int i=0; i<size; i++)
{
    string sub_str; int temp_sum=0;
    //Creating a substring for comparison
    for(int j=i, l=0; j<size, l<size-i; j++, l++)           
    {
        sub_str.at(l)=s.at(j);
    }

    if(sub_str.at(0)==s.at(0))
    {
        temp_sum++;
        int k=1;
        while(sub_str.at(k)==s.at(k))
        {
            temp_sum++;
            k++;
        }
    }
    sum=sum+temp_sum;
}

return sum;}

Можеткто-то, пожалуйста, скажите мне, где я иду не так?

enter image description here

1 Ответ

0 голосов
/ 15 октября 2019

Из документации std :: string :: at ()

Функция автоматически проверяет, является ли pos допустимой позицией символа в строке (т.е. pos меньше длины строки), вызывая исключение out_of_range, если это не так.

Здесь sub_str - пустая строка (длина 0), но вы пытаетесь обратиться к ней вПервая строка вашего внутреннего цикла:

    sub_str.at(l)=s.at(j);

Одним из способов преодоления этого может быть инициализация строки с одинаковой длиной s и ее редактирование на месте.

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