敏感词.h文件
#pragma once
#ifndef __KAIHUA_SENSITIVE__#define __KAIHUA_SENSITIVE__
#include <map>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class Sensitive
{
map<string,char> ctr;
public:
//==========================================================
// 功能:导入敏感词库 //
// 参数:需要导入敏感词库的,文件txt的名字 //
//==========================================================
void load( const char* filePath );
//==========================================================
// 功能:敏感词过滤 //
// 需要过滤的字符串 //
//==========================================================
string replace(string str);
Sensitive(void);
~Sensitive(void);
};
#endif
.cpp
#include "Sensitive.h"
Sensitive::Sensitive(void)
{
}
Sensitive::~Sensitive(void)
{
}
void Sensitive::load( const char* filePath )
{
char str[128] = {};
//map<string,char>ctr;
ifstream f;
f.open(filePath,ios::in);
int i=0;
while(EOF != (str[i] = f.get()))
{
string str1;
if (str[i] == '\n')
{
str1.assign(str,i);
ctr.insert(pair<string,char>(str1,'a'));
i = 0;
}
else
i++;
}
}
string Sensitive::replace( string str)
{
int len = str.size();
string sContent;
for (int i=0;i<len;i++)
{
sContent = str.substr(0,len-i);
int a = ctr.count(sContent);
if( 0 != a)
{
for (int j=0;j<len-i;j++) str[j] = '*';
break;
}else
{
for (int j=2;j<10;j++)
{
sContent = str.substr(i,j);
int a = ctr.count(sContent);
if( 0 != a)
{
for (int z=0;z<j;z++) str[i+z] = '*';
break;
}
}
}
}
return str;
}