您的位置:首页 > 其它

【经典算法】:英雄联盟中打字屏蔽系统的实现

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;
}


运行截图



如图所示,操你妈三个字已经被屏蔽,说明此系统功能是好使的,欢迎大家借鉴使用~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: