垃圾邮件检查
小明被垃圾邮件所困扰,遂决定构造自己的垃圾邮件过滤器:
- 通过遍历邮件的每一行文字,来判断该行为good还是bad
- bad行越多,该邮件越有可能是垃圾邮件
- good行使用“o”来标记,bad行使用“x”来标记
- 所有的标记放到judgeLog字符串中
- 例如judgeLog=”oxooo”代表邮件有5行,其中第二行是bad
- 小明给出了伪代码实现
// 设置该邮件的score为0
// 对该邮件的每一行进行遍历
// 如果该行为good,将score加上G
// 如果改行为bad,将score减去B
// 如果score为负
// 返回该邮件为垃圾邮件("SPAM")
// 如果score永远不是负数
// 返回该邮件为正常邮件("NOT SPAM")
伪代码中G、B为正整数,分别代表good,bad的权重值(由用户自定义)
输入
- 行标记字符串(string):judgeLog
- good行权重(int):good
- bad行权重(int):bad
输出
- 是否为垃圾邮件(string):SPAM / NOT SPAM
思路
遍历judgeLog,求取score的值,当score为负数时及时返回
代码实现
#include <iostream>
#include <string>
using namespace std;
class SpamChecker
{
public:
static string spamcheck(string judgeLog, int good, int bad)
{
int sum=0;
for(int i=0; i<judgeLog.length(); i++)
{
if('o' == judgeLog[i])
sum += good;
else
{
sum -= bad;
if(sum<0)
return "NOT SPAM";
}
}
return "SPAM";
};
};
int main()
{
string judgeLog;
int good, bad;
cout << "set judgeLog:"<<endl;
cin >> judgeLog;
cout << "set good:" << endl;
cin >> good;
cout << "set bad:" << endl;
cin >> bad;
string resultSpam = SpamChecker::spamcheck(judgeLog,good,bad);
cout << resultSpam;
return 0;
}