如果可能的話,我想幫助一下這個電子郵件解析器。C++中的電子郵件解析器
此代碼有所有適當的聲明和初始化的,但我不知道我在哪裏搞亂了這個循環:
while (getline(fin, lines))
{
for (int i = 0; i < lines.length(); i++)
{
if (lines[ i ] == '@')
{
for (s = i; s < lines.length(); s--)
{
if (s < 0)
{
break;
}
if (validChar(lines[ s ]) == false)
{
break;
}
} //for
for (e = i; e > lines.length(); e++)
{
if (e == lines.length())
{
break;
}
if (validChar(lines[ e ]) == false)
{
break;
}
if (lines[ e ] == '.')
{
hasDot = true;
}
} // for
anEmail = lines.substr(s, e);
cout << anEmail << endl;
}
} // if
} // while
這是該函數:
bool validChar(char a)
{
bool result = false;
if (a >= 'A' && a <= 'Z' || a >= 'a' && a <= 'z' || a >= '0' && a <= '9' || a == '.' || a == '-' || a == '+')
{
result = true;
}
return result;
}
編輯:一個測試案例是在一個文本文件中的這個字符串「這是一個電子郵件文件與[email protected]和一些其他文本的測試」,我想這個「[email protected]」,我只得到這個「@ my.test和其他一些測試文本」
我哪裏錯了?
我可以建議你嘗試改進一點縮進嗎?這很難閱讀,特別是因爲你在外部'for'循環中有這麼多的代碼。 –
您能舉一些示例輸入和預期輸出嗎? –
介紹一個[testcase](http://sscce.org),或者我們猜測(我不打算花費時間去做!)。 –