Основной вопрос, ошибка: субстрат вне диапазона - PullRequest
3 голосов
/ 21 апреля 2011

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

0 голосов
/ 21 апреля 2011

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

0 голосов
/ 21 апреля 2011

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)
...