3

だから私はプログラムを書いており、その一部は文字列の配列を処理することであり、文字列配列の各要素から、文字列内のすべてのバイグラムを取り出して別の配列に配置しようとしています。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="";
        }
    }
}
4

2 に答える 2

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)
于 2011-04-21T03:41:51.017 に答える
0

ループでは、0 から lowpunct[i].length()-2 になります。(サイズ 2 を含む)。つまり残り1キャラ。for ループの "<=" を "<" に変更します。

于 2011-04-21T03:55:34.917 に答える