【经典算法】:英雄联盟中打字屏蔽系统的实现
2015-11-25 00:39
363 查看
前言
在玩英雄联盟中玩家经常会出现这种问题,喜欢打字喷人,比如说喜欢喷人说:操你妈,狗日的,操了。你妈逼的,傻逼等。。。。这里会出现一个词语叫做高频词汇,比如说上述那些词语就是如此,上述词语会被系统自动替换成*号、
举个例子:输入“我操你妈逼啊”因为系统会把操你妈认为是高频词汇,所以输出:我*逼啊 懂了吧,是不是好简单
具体实现过程
首先要大胆的猜测一下英雄联盟真实的打字屏蔽系统是怎么样子的。我觉得是有一个系统词库,里面记录了各种高频词汇,然后管理员可以不断的添加高频词汇,玩家每次输出一行文字都会经由这个系统处理,相关的高频文字就会被输出成*号
这里***了一个模拟打字屏蔽系统的软件系统,可以通过把相关文字进行屏蔽
思路如下:
输入一个字符串,得到初始化的输出字符串
输入一个屏蔽字符串
比较,如果屏蔽字符串再输出字符串的里面,把相关部分用*代替
思路就是如此,很简单吧~代码也不难,里面会解释
代码
[code]#include <iostream> using namespace std; int num[10],whole=0; //num记录要屏蔽的字符串在原字符串中的位置,whole是记录存的num的数目 int main(){ char s[50]; //原字符串 char temp[10]; //屏蔽字符串 cin>>s>>temp; for(int i=0;i<strlen(s);i++){ //找字符串模块 if(s[i]==temp[0]){ int count=0,flag=1; for(int k=i;k<i+strlen(temp);k++){ if(s[k]!=temp[count++]){ flag = 0; break; } } if(flag==1){ cout<<"find it ,and it is "<<temp<<" locate at "<<i+1<<endl; num[whole++] = i; //找到记录位置 } else cout<<"no find"<<endl; } } int temp_count=0; for(i=0;i<strlen(s);i++){ //输出模块 if(i==num[temp_count]){ //把相关位置输出成*号 temp_count++; i+=strlen(temp)-1; cout<<"*"; } else{ cout<<s[i]; } } cout<<endl; }
运行截图
如图所示,操你妈三个字已经被屏蔽,说明此系统功能是好使的,欢迎大家借鉴使用~
相关文章推荐
- SQL防注入
- 递归求和
- CentOS 6.4 安装极点五笔输入法
- C++类的实现方式
- Qt 学习之路 2(27):渐变
- { Cracking The Coding Interview: 150 programming Q&A } 5th edition Part II
- 设计模式四之工厂模式1
- Qt 学习之路 2(29):绘制设备
- Beta版本冲刺计划及安排
- Java设计模式——观察者模式
- Java设计模式——观察者模式
- 简单的C编程题
- 【Cocos2d-x 3.x】 动作类Action源码分析
- UITableViewCell的重用代码
- 信息安全系统设计基础实验二:固件设计(20135229,20135234)
- 全面解析《嵌入式程序员应该知道的16个问题》
- 黑马程序员_java多线程玩玩IO流,求开导!!
- 字符处理库函数
- struts中利用jquery的$.ajax方法来动态获得图片以及信息
- 坐标系统 Qt 学习之路 2(28):坐标系统