Основной вопрос, ошибка: субстрат вне диапазона
Итак, я пишу программу, и часть ее состоит в том, чтобы иметь дело с массивом строк, и из каждого элемента в массиве строк я пытаюсь извлечь каждую биграмму в строке и поместить ее в другой массив. Я пытаюсь сделать это с помощью функции 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 на "<".