为了实现一个简单的垃圾邮件过滤程序,我可以使用C++ STL中的容器和算法来存储关键词、分析文本并判断是否为垃圾邮件。以下是一个基于关键词匹配的简单示例,我们将使用`std::unordered_set`存储关键词,并通过遍历邮件内容与关键词集合进行比对。
```cpp
#include <iostream>
#include <string>
#include <unordered_set>
#include <vector>
// 假设我们有一个预定义的垃圾邮件关键词列表
std::unordered_set<std::string> spamKeywords = {
"free", "offer", "prize", "earn money fast", // 添加更多关键词...
};
// 判断给定的邮件正文是否包含垃圾邮件关键词
bool isSpam(const std::string& emailContent) {
for (const auto& word : emailContent) {
std::string currentWord;
// 这里假设单词由空格分隔,实际应用中可能需要更复杂的分词逻辑
if (std::isalpha(word)) { // 只处理字母字符(简化版)
currentWord += std::tolower(word); // 转化为小写以便不区分大小写比较
} else if (!currentWord.empty()) { // 遇到非字母字符时检查上一个单词
if (spamKeywords.find(currentWord) != spamKeywords.end()) {
return true; // 发现垃圾邮件关键词,返回true
}
currentWord.clear(); // 准备读取下一个单词
}
}
// 检查最后一个单词(没有遇到非字母字符结束的情况)
if (!currentWord.empty() && spamKeywords.find(currentWord) != spamKeywords.end()) {
return true;
}
return false; // 如果没有发现关键词,则不是垃圾邮件
}
int main() {
std::string emailSample = "Earn money fast with our free offer! Click now!";
if (isSpam(emailSample)) {
std::cout << "这封邮件疑似垃圾邮件。\n";
} else {
std::cout << "这封邮件可能不是垃圾邮件。\n";
}
return 0;
}
```
这个程序非常基础,仅根据关键词是否存在来判断是否为垃圾邮件。在实际场景中,垃圾邮件过滤器会更加复杂,可能涉及自然语言处理技术,如TF-IDF、贝叶斯分类器等方法。此外,上述代码并未处理标点符号和其他特殊字符,也没有进行分词,对于真实世界的电子邮件内容,您可能需要引入成熟的分词库或者自行编写更完善的文本处理函数。