在我的项目中,我采用了阿霍Corasick算法做了一些消息过滤器模式在服务器端,邮件服务器得到的是多字节字符的字符串。但经过多次试验,我发现瓶颈mulitbyte字符串和Unicode的wstring之间的转换。我现在用的是一对mbstowcs_s和wcstombs_s的,这需要整个模式的近95%的时间成本。另外,我已经试过的MultiByteToWideChar /调用WideCharToMultiByte,它得到一样的结果。  所以我想如果有一些其他的做的工作更有效的方式?我的项目是建立在VS2005和串并转换将包含中国字。   非常感谢。

没有正确的解决方案

其他提示

有多种可能性。

首先,什么叫“多字节字符”是什么意思?你的意思是UTF8或ISO DBCS系统?

如果你看UTF8的定义和UTF16有范围做了高度优化的变换,剥开的“X”位和重新格式化它们。例如,见 http://www.faqs.org/rfcs/rfc2044.html 约UTF8 <==> UTF32会谈。调整UTF16将是简单的。

在第二选择可能是在完全UTF16工作。在UTF16渲染你的网页(或用户界面对话框或其他),并获取用户输入的方式。

如果一切都失败了,有比阿勒阿霍 - Corasick其他字符串算法。也许寻找一种算法,能与您的原始编码。

[添加29-JAN-2010] 请参见 http://www.cl.cam。 ac.uk/~mgk25/ucs/utf-8-history.txt 了解上转换,包括mbtowc()和wctomb的两个C实现()。这些被设计成与任意大wchar_ts工作。如果你只是有16位wchar_ts那么你可以把它简化很多。

这些将大大快于通用的(码页敏感)的版本中的标准库。

弃用(我认为),但你总是可以使用非安全型(mbstowcs和wcstombs)。不知道这将有一个明显的改善,虽然。另外,如果您的字符集是有限的(A - Z,0 - 9,例如)?,你总是可以用查找表做手工..

也许你可以调用量减少的MultiByteToWideChar?

您也可能采用阿霍Corasick直接在多字节字符串的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top