主要内容:
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++

最低0.47元/天 解锁文章
678

被折叠的 条评论
为什么被折叠?



