Основной вопрос, ошибка: субстрат вне диапазона

Итак, я пишу программу, и часть ее состоит в том, чтобы иметь дело с массивом строк, и из каждого элемента в массиве строк я пытаюсь извлечь каждую биграмму в строке и поместить ее в другой массив. Я пытаюсь сделать это с помощью функции substr и попытался настроить его, но я продолжаю получать ошибку OOR.

код гласит:

"numwords" - это количество слов в массиве строк, а "lowpunct" - это массив строк.

for(i=0; i<numwords;i++)
{                
    for(x=0; x<=lowpunct[i].length()-2;x++)
    {
        if(lowpunct[i].length()-2 <=0)
        {
            bigram[count]=lowpunct[i];
            count++;
        }
        else
        {
            bistring=lowpunct[i].substr(x,2);
            bigram[count]=bistring;
            count++;
            bistring="";
        }
    }
}

2 ответа

Решение

string::length() это size_t без знака, так

if(lowpunct[i].length()-2 <=0)

будет проблема, когда встречается строка длиной менее 2. Это потому, что результатом недопущения целого числа без знака является то, что число оборачивается с наибольшим значением. Условный цикл for также неверен.

Перепишите их примерно так:

 for(x=0; x+2 <= lowpunct[i].length();x++)
 if(lowpunct[i].length() <= 2)

В вашем цикле вы переходите от 0 к lowpunct[i].length()-2. (включая размер-2). Это означает, что остался только 1 символ. Измените "<=" в цикле for на "<".

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