求帮写一个敏感词过滤的作业用 c++,求简单点,新人

TAI? 2019-11-05 05:33:43
有两个file
一个是BadWords.txt, 一个是BannedWords.txt,

first ask for input filname,

如果文本中出现badword, 那这个字变成*号;
如果文本中出现bannedword,那这一行句子就会消失。

网上好多code 目前能力太菜..看不明白
就是一个c++课的作业
T T.. 我想的头皮要撕裂了//

然后
cout 结果
...全文
797 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
TAI? 2020-07-23
  • 打赏
  • 举报
回复
上上个学期的c++入门课 作业都是拖到最后一天才开始写
本以为这辈子不会再碰计算机了
未曾想 这年头至少得会个python 不然就像5g时代没有手机
把之前的作业也贴上了 老师给了80%的分
格式有问题 似乎是由bug 不想看了...233
反正想着..能跑出来就行
感觉网站整体还是挺友好的
至少我在这里学了很多python的东西
结帖了


--------------------------------------------------------------------------------------------
//csCI 1133 HW6B

//11/4/2019

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

bool badcheck(string phrase, string badwords[], int count);
//check whether or not have bad words
bool bancheck(string phrase, string banned[], int count);
//check whether or not have banned words
void doclean(string & phrase, string badwords[], int count );
//ignore the banned phrase, to fix the bad word

int main()
{
string badwords[100];
string banned[100];
string words,phrase;
string filename;

ifstream inn,in;
int i=0;
inn.open("BadWords.txt");
while(inn>>words)
{
badwords[i]=words;
i++;
}
inn.close();

in.open("BannedWords.txt");
int j=0;
while(in>>words)
{
banned[j]=words;
j++;
}
in.close();

cout<<"input text file to cleanup: ";
cin>>filename;
ifstream inStream;
inStream.open(filename);
if(inStream.fail())
{
cout<<"file read error "<<endl;
exit(1);
}
while(getline(inStream,phrase))
{
if(!bancheck(phrase,banned,j))
{
if(!badcheck(phrase,badwords,i))
cout<<phrase<<endl;

else
{
doclean (phrase, badwords,i );
cout<<phrase<<endl;
}

}


}

return 0;

}
bool badcheck(string phrase, string badwords[], int count)
{
for(int i=0;i<count;i++)
{
if ((phrase.find(badwords[i])>=0)&& phrase.find(badwords[i])<phrase.length())
return true;

}
return false;
}

bool bancheck(string phrase, string banned[], int count)
{
for(int i=0;i<count;i++)
{
if ((phrase.find(banned[i])>=0)&& phrase.find(banned[i])<phrase.length())
return true;
}
return false;
}

void doclean(string & phrase, string badwords[], int count )
{
int size;
string str;

for(int i=0;i<count;i++)
{
if ((phrase.find(badwords[i])>=0)&& (phrase.find(badwords[i])<phrase.length()))
{
size=badwords[i].length();


for(int j=0;j<size;j++)
str= str + "*";


phrase.replace(phrase.find(badwords[i]),badwords[i].length(),str);
}
}
}





zrd122767 2019-11-20
  • 打赏
  • 举报
回复
引用 楼主 ImDumbChicken的回复:
有两个file
一个是BadWords.txt, 一个是BannedWords.txt,

first ask for input filname,

如果文本中出现badword, 那这个字变成*号;
如果文本中出现bannedword,那这一行句子就会消失。

网上好多code 目前能力太菜..看不明白
就是一个c++课的作业
T T.. 我想的头皮要撕裂了//

然后
cout 结果
又是求代码,我们写了,你就确定能看懂吗?
「已注销」 2019-11-10
  • 打赏
  • 举报
回复
文本过滤常用的数据结构应该是字典树,不会字典树的可以去百度一下,我是用JAVA的,不知道C++的代码。其实使用字典树是用空间换取时间,把关键词构造成一棵树,占据一定的内存空间,然后进行遍历
  • 打赏
  • 举报
回复
英文虽然不需要分词,但是特定语法结构仍然可能导致严重的歧义,著名的The chicken is ready to eat就是一例,这句话语法上既可以理解为主动语句也可以理解为被动语句,所以,to eat or to be eaten, that is the question
q137834589 2019-11-09
  • 打赏
  • 举报
回复
advance_coder 2019-11-08
  • 打赏
  • 举报
回复
引用 60 楼 WQR1994的回复:
[quote=引用 58 楼 advance_coder 的回复:] 有个叫mmseg的开源分词库(很好用的一个开源分词库,源码c),可以解决你的问题。 先用mmseg对字符串或文本进行分词。再将分词后的结果,一个个中文或英文词(组)去你的脏词库里面查询。
楼主好像只要英文 —————————————————— “南京市长江大桥”如果江大桥真的当上了南京市长,那就要看上下文,分词器都会GG,哈[/quote] 英文更简单了,空格tab和标点符号直接分词,正是因为汉字不具备这个条件,才有的分词词库。
data-v-165b75c4 2019-11-08
  • 打赏
  • 举报
回复
mmseg是个算法,于是叫mmseg的分词库就有很多很多了
data-v-165b75c4 2019-11-08
  • 打赏
  • 举报
回复
引用 58 楼 advance_coder 的回复:
有个叫mmseg的开源分词库(很好用的一个开源分词库,源码c),可以解决你的问题。 先用mmseg对字符串或文本进行分词。再将分词后的结果,一个个中文或英文词(组)去你的脏词库里面查询。
楼主好像只要英文 —————————————————— “南京市长江大桥”如果江大桥真的当上了南京市长,那就要看上下文,分词器都会GG,哈
data-v-165b75c4 2019-11-08
  • 打赏
  • 举报
回复
楼主连输出file read err都要人帮忙写……
advance_coder 2019-11-08
  • 打赏
  • 举报
回复
有个叫mmseg的开源分词库(很好用的一个开源分词库,源码c),可以解决你的问题。 先用mmseg对字符串或文本进行分词。再将分词后的结果,一个个中文或英文词(组)去你的脏词库里面查询。
data-v-165b75c4 2019-11-08
  • 打赏
  • 举报
回复
std::regex,解决完了
  • 打赏
  • 举报
回复
引用 53 楼 lin5161678 的回复:
[quote=引用 52 楼 智者知已应修善业 的回复:]
假如楼主也学得像你这样程度我会觉得很惋惜,如何就被人误导成像你回复函数传递数那样认为自己一贯正确的回复而感叹!
好像你多说两句 别人就看不出你没看懂题目就胡乱回答一样 自欺欺人 慢慢安慰自己把
顺便 英文不好无所谓 英文题目看不懂就少说两句丢人现眼[/quote]

要我说这个楼主也是没诚意,跑到论坛上伸手,还整个英文题目
足球中国 2019-11-08
  • 打赏
  • 举报
回复
难就多看几遍。
  • 打赏
  • 举报
回复
有待提高不需要你来提示,你的提示也不会理会,找别人玩去,这论坛有的是你要寻觅的对象。
引用 26 楼 lin5161678 的回复:
[quote=引用 25 楼 智者知已应修善业 的回复:] 我就是看明白了,也是那样回复,看楼主是否还有需求的意图,需要告诉你? [quote=引用 20 楼 lin5161678 的回复:] [quote=引用 18 楼 智者知已应修善业 的回复:] 管教小P孩不易,所谓示例则可完全也可部分完全,楼主只要给个指引即可,不是要照抄就用。 要完成几个*号也是要楼主本人再追问,自然会有人回复,要你来越俎代庖? 假如楼主问我要对应几个*号,那我一定会演示正确,这一点毋庸置疑。 像这等小处理几个*号的,小事,只要按数量计算即可。 若要修改函数,也是楼主的事,明白了? 这是你的贴?
所以 你根本没看懂题目本身就是 *个数和敏感词长度一样 这个要求??? 理解能力不足 你滴 明白??[/quote][/quote]不用看 题主就是有这个需求 你不清楚题主有没有这个需求就是误人子弟 就是没看懂题目 就是理解能力有待提高 就是装逼失败 就是丢人 [/quote]
  • 打赏
  • 举报
回复
呵呵,这不影响我虾米,只是想提高你自己不敢明说罢了。 这人直接无视即可,自作多情,你看到别人气急败坏跺脚了?天大笑话!
引用 24 楼 lin5161678 的回复:
[quote=引用 23 楼 智者知已应修善业 的回复:] 我直接写错也不用求你来修改 [quote=引用 21 楼 lin5161678 的回复:] [quote=引用 19 楼 智者知已应修善业 的回复:] 我的回复有时完全照抄即可,有时未调试回复是不能照抄的。
行吧 你的已调试回复也有不能抄的 比如直接写错的 多的是 [/quote][/quote]我对修改你的错误 毫无兴趣 别自作多情 但我对指出你的错误很有兴趣 1 避免你误人子弟 2 就喜欢看你装逼失败后气急败坏的样子 [/quote]
lin5161678 2019-11-07
  • 打赏
  • 举报
回复
引用 25 楼 智者知已应修善业 的回复:
我就是看明白了,也是那样回复,看楼主是否还有需求的意图,需要告诉你? [quote=引用 20 楼 lin5161678 的回复:] [quote=引用 18 楼 智者知已应修善业 的回复:] 管教小P孩不易,所谓示例则可完全也可部分完全,楼主只要给个指引即可,不是要照抄就用。 要完成几个*号也是要楼主本人再追问,自然会有人回复,要你来越俎代庖? 假如楼主问我要对应几个*号,那我一定会演示正确,这一点毋庸置疑。 像这等小处理几个*号的,小事,只要按数量计算即可。 若要修改函数,也是楼主的事,明白了? 这是你的贴?
所以 你根本没看懂题目本身就是 *个数和敏感词长度一样 这个要求??? 理解能力不足 你滴 明白??[/quote][/quote]不用看 题主就是有这个需求 你不清楚题主有没有这个需求就是误人子弟 就是没看懂题目 就是理解能力有待提高 就是装逼失败 就是丢人
  • 打赏
  • 举报
回复
我就是看明白了,也是那样回复,看楼主是否还有需求的意图,需要告诉你?
引用 20 楼 lin5161678 的回复:
[quote=引用 18 楼 智者知已应修善业 的回复:] 管教小P孩不易,所谓示例则可完全也可部分完全,楼主只要给个指引即可,不是要照抄就用。 要完成几个*号也是要楼主本人再追问,自然会有人回复,要你来越俎代庖? 假如楼主问我要对应几个*号,那我一定会演示正确,这一点毋庸置疑。 像这等小处理几个*号的,小事,只要按数量计算即可。 若要修改函数,也是楼主的事,明白了? 这是你的贴?
所以 你根本没看懂题目本身就是 *个数和敏感词长度一样 这个要求??? 理解能力不足 你滴 明白??[/quote]
lin5161678 2019-11-07
  • 打赏
  • 举报
回复
引用 23 楼 智者知已应修善业 的回复:
我直接写错也不用求你来修改 [quote=引用 21 楼 lin5161678 的回复:] [quote=引用 19 楼 智者知已应修善业 的回复:] 我的回复有时完全照抄即可,有时未调试回复是不能照抄的。
行吧 你的已调试回复也有不能抄的 比如直接写错的 多的是 [/quote][/quote]我对修改你的错误 毫无兴趣 别自作多情 但我对指出你的错误很有兴趣 1 避免你误人子弟 2 就喜欢看你装逼失败后气急败坏的样子
  • 打赏
  • 举报
回复
我直接写错也不用求你来修改
引用 21 楼 lin5161678 的回复:
[quote=引用 19 楼 智者知已应修善业 的回复:] 我的回复有时完全照抄即可,有时未调试回复是不能照抄的。
行吧 你的已调试回复也有不能抄的 比如直接写错的 多的是 [/quote]
  • 打赏
  • 举报
回复
就像回复函数传数组一样,我只是告诉说有2种方式这样提示就可以了,能直接就使用?你个长不大的小P孩。
引用 16 楼 lin5161678 的回复:
[quote=引用 15 楼 智者知已应修善业 的回复:] 我要是再次替人教导小P孩,就要收费了 [quote=引用 14 楼 lin5161678 的回复:]
演示替换啊 别人 原词literary 敏感字lit 替换结果 ***erary 基本功能完全不同 也好意思说演示 误导吧 [/quote][/quote]哈哈哈哈 说得这么明显都没搞清楚重点吗 敏感词可配置 *个数和敏感词长度一样 这2个基本功能都做不到 全部硬编码 还号称演示 笑嘻嘻 [/quote]
加载更多回复(42)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧