仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 970|回复: 11
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计(再发).NET脏字过滤算法 仓酷云

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我也不知道,我原来理解的,NET就是C++编程,只是与net网页编程相对,呵呵。以为.ET就是高级C++编程。感激sumtech的复兴和会商,底本的效力已充足网站有用了,固然也想到一些改善办法,可是一向懒得往做。sumtech经由过程邮件跟我会商,我也终究抽了工夫做了改善,改善后的算法效力比本来的算法进步了400%,也就是仅必要本来的1/5工夫。
拜见/dotnet/20111127/315434.html。

算法关头是将两个BitArray兼并成了byte[char.MaxValue],个中7个bit用来判别前7个字符,另外一个bit判别其他字符。而且增添了minWordLength和charCheck,用来过滤太短的判别,和唯一一个字符时的疾速判别。

利用的数据:
privateHashSet<string>hash=newHashSet<string>();
privatebyte[]fastCheck=newbyte[char.MaxValue];
privateBitArraycharCheck=newBitArray(char.MaxValue);
privateintmaxWordLength=0;
privateintminWordLength=int.MaxValue;初始化数据的代码:
foreach(stringwordinbadwords)
{
maxWordLength=Math.Max(maxWordLength,word.Length);
minWordLength=Math.Min(minWordLength,word.Length);

for(inti=0;i<7&&i<word.Length;i++)
{
fastCheck[word]|=(byte)(1<<i);
}

for(inti=7;i<word.Length;i++)
{
fastCheck[word]|=0x80;
}

if(word.Length==1)
{
charCheck[word[0]]=true;
}
else
{
hash.Add(word);
}
}判别是不是包括脏字的代码:
publicboolHasBadWord(stringtext)
{
intindex=0;

while(index<text.Length)
{
if((fastCheck[text[index]]&1)==0)
{
while(index<text.Length-1&&(fastCheck[text[++index]]&1)==0);
}

if(minWordLength==1&&charCheck[text[index]])
{
returntrue;
}

for(intj=1;j<=Math.Min(maxWordLength,text.Length-index-1);j++)
{
if((fastCheck[text[index+j]]&(1<<Math.Min(j,7)))==0)
{
break;
}

if(j+1>=minWordLength)
{
stringsub=text.Substring(index,j+1);

if(hash.Contains(sub))
{
returntrue;
}
}
}

index++;
}

returnfalse;
}2008-02-01订正:发明Bug,一个字符的charCheck应当放到for轮回外,往失落j==1的判别,外层的判别改成if(j+1>minWordLength)。

PS:如今婚配的是最小长度,而且是辨别巨细写的,这部分功效在脏字交换时必要完成。
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-20 20:42:16 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
若天明 该用户已被删除
板凳
发表于 2015-1-29 21:55:20 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
小女巫 该用户已被删除
地板
发表于 2015-2-3 13:58:12 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
admin 该用户已被删除
5#
发表于 2015-2-10 22:21:03 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
兰色精灵 该用户已被删除
6#
发表于 2015-3-1 16:18:29 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-1 20:08:52 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
山那边是海 该用户已被删除
8#
发表于 2015-3-3 01:36:10 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-11 08:21:20 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
精灵巫婆 该用户已被删除
10#
发表于 2015-3-11 12:47:01 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
简单生活 该用户已被删除
11#
发表于 2015-3-18 11:40:24 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
飘灵儿 该用户已被删除
12#
发表于 2015-3-25 19:50:46 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表