0

次のようなテキスト ファイルがあります。

this is an email file with DummyTest@my.test and some other text for the test
ATest@my.test
BTest@my.test

ここでsubstr (s, e - s)、s は行の先頭、e は末尾で、次のようになります。

terminate called after throwing an instance of 'std::out_of_range'
what():  basic_str`entering::substr
Aborted

これは下の 2 行でのみ発生し、最初の行は DummyTest@my.test を出力します。

私が知っている問題はs、 が行の先頭にあり、その前に文字がない場合 (つまり、「ATest@my.test」または「BTest@my.test」)、このエラーが発生することです。これを防ぐために何を追加できますか?

while (getline(fin, lines))
{
for (int i = 0; i < lines.length(); i++)
{
if (lines[i] == '@')
{
int s;

if (i == 0 || i == 1) break;
for (s = i - 1; s < lines.length() ; s--)
{
if(validChar(lines[s]) == false )
 {
 s = s + 1;
 break;
 }
} //for 

 int e; 
 bool hasDot = false;  

 for (e = i + 1; e < lines.length(); e++)
 {
 if (e == lines.length()) break;
 if(validChar(lines[e]) == false )
 {
 break;
 } // if in for

 if(lines[e] == '.') hasDot = true;
 } // for 

anEmail = lines.substr (s,  e - s);
if (s < i && e > i && hasDot == true)
cout << anEmail << endl; 
4

1 に答える 1

1

明らかに、out_of_range 例外がスローされたため、パラメータの 1 つが範囲外です。値 s と e が期待どおりであることを確認するために、いくつかのテストを実行します。

于 2012-12-09T20:56:08.537 に答える