基本问题,错误:substr超出范围

时间:2011-04-21 03:23:00

标签: c++ substr

所以我正在编写一个程序,其中一部分是处理一个字符串数组,并且从字符串数组中的每个元素,我试图取出字符串中的每个二元组并将其放在另一个字符串中阵列。我试图通过使用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 :(得分:0)

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)

答案 1 :(得分:0)

在你的循环中,你将从0变为低位[i] .length() - 2。 (包括2号)。这意味着只剩下1个字符。将for循环中的“&lt; =”更改为“&lt;”。