c++基于字符串匹配的垃圾邮件过滤系统

主要内容:

1.设计一个由敏感词所组成的词库,以字符串结构存储。
2.设计一个邮件过滤系统,对邮件内容与词库中的敏感词进行模式匹配,最终返回是否垃圾邮件的标记。
3.编写一个主函数,输入一段文字模拟邮件内容,测试系统功能。

实现方法:

程序主要使用了KMP算法进行字符串模式匹配:

#Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。KMP算法的时间复杂度为O(m+n)。

​ # main函数:设置存储关键词的字符数组pattern,多个关键词组成敏感词词库。设置存储邮件的字符数组string,当用户输入关键词和邮件内容后,调用KMP函数,KMP函数会返回pattern在string中的位置,如果没有找到会返回notfound,根据返回值打印是否垃圾邮件。

​ # KMP函数:求string长度为n,pattern长度为m,申请空间分配给match数组,调用BuildMatch函数,然后从头开始向后比较,匹上就继续向后一位,匹配失败则pattern的指针回退,回退的位置和match值有关,然后重新比较。当pattern中字符全部匹配上,表示找到,返回它在string中对应的下标,否则返回notfound。

​ # BuildMatch函数:分析关键词pattern,对pattern的每一个字符得出它对应的match值存放在数组中。

程序:

#include <stdio.h>
#include <string.h> 
#include <stdlib.h>

typedef int Position;
#define NotFound -1

void BuildMatch(char *pattern, int *match)//关键词预分析函数
{
   
   	
	//分析pattern,对pattern的每一个字符得出它对应的match值
	Position i, j;
	int m = strlen(pattern); 
	match[0] = -1; //pattern的第一个字符match值为-1

	for (j = 1; j < m; j++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值