電子メールの送信元がブラックリストにあるかどうか、または電子メールの内容の単語がブロックされた単語のリストにあるかどうかをチェックして、電子メールをフィルタリングする何かをプログラムする必要があります。
メールをフィルタリングする関数は次のとおりです。
void filterEmail(vector<email>& amis, vector<email>& corbeille,
vector<email>& rejete, vector<email>& emails,
vector<string> b, vector<string> w,
vector<string> spam)
{
bool isListed(email, vector<string>);
bool isSpam(email, vector<string>);
for(vector<email>::size_type i = 0; i < emails.size();)
{
if(isListed(emails[i], b))
{
corbeille.push_back(emails[i]);
emails.erase(emails.begin() + i);
}
else i++;
}
for(vector<email>::size_type i = 0; i < emails.size();)
{
if(isListed(emails[i], w))
{
amis.push_back(emails[i]);
emails.erase(emails.begin() + i);
}
else i++;
}
for(vector<email>::size_type i = 0; i < emails.size();)
{
if(isSpam(emails[i], spam))
{
cout << emails[i].source << " " << emails[i].content[0];
rejete.push_back(emails[i]);
emails.erase(emails.begin() + i);
}
else i++;
}
return;
}
isSpam が初めて true を返した後に気付いたいくつかのテスト カウントの後、コンテンツ内のスパム ワードをチェックする部分 (3 番目の for ループ) に本当に奇妙な問題があります。は true を返し、次のすべての電子メールは true を返します。
bool isSpam(const email e, const vector<string> motsinterdis)
{
for(vector<string>::size_type i = 0; i < e.content.size(); ++i)
{
for(vector<string>::size_type j = 0; j < motsinterdis.size(); ++j)
{
if(string::npos != e.content[i].find(motsinterdis[j]))
{
cout << e.source << endl;
cout << motsinterdis[j] << " found in " << e.content[i] << endl;
return true;
}
}
}
return false;
}
ベクター コンテンツを含む Struct Email があります。そこにあるフランス語の変数については申し訳ありません:P 私は十分に明確であったことを願っています, ありがとう.