什么是比较两个单独的字符(或者char或UTF-16 wchar_ts)忽略大小写的好方法?

一个简单的实现将是大写或二者lowercasing。是其中之一认为是更好的,或者有其他的方法?

我明白,一个完全正确的比较是不可能使用Unicode的所有细节。比较主要是意味着的配置文件和微语法一些基本的分析,因此不需要完美。我要寻找每个字符比较的限制下,不太错误的执行。

<强> [编辑] 结果 这些配置文件可能包含显示给用户的文本。另外,在分析用户输入时,我无法避免Unicode文本。

有帮助吗?

解决方案

您需要CompareStringEx。这需要宽字符,并且具有不区分大小写的标志。

其他提示

首先将它们转换为字符串,例如进行两次TCHARS的阵列,您的TCHAR复制到第一个,并设置第二个到_T(“\ 0”)。然后调用LSTRCMPI或CompareString。这两种可能会根据您的需要是不够的,但他们是一个良好的开端。例如,如果你想upcase SS,或者,如果用户使用的是土耳其和要upcase我,做你自己是比你想象的更难。

如果你想基于ASCII区分大小写的比较不使用Unicode的配置文件。使用ASCII这些文件。然后,你不必担心语言环境。

如果你要自己限制为英语(ASCII)的关键字,再有就是做比较琐碎的方式。如果你想使用A-Z等字母关键字这并不能一概而论,但它精美的作品为A-Z。

如果您出示担保您传递给该功能的值中的一个将是包含在ASCII范围32到127(AZ,AZ,0-9,最符号)只可见字符已知良好关键字字符串然后就可以做简单bitmasking到下转换为大写。

bool IsKeywordMatch(LPCTSTR psz, LPCTSTR pszKey)
{
    while (pszKey[0])
    {
       if (psz[0] < 0x20)
          return false;

       if ((psz[0] & ~0x20) != (pszKey[0] & ~0x20))
         return false;

       ++psz;
       ++pszKey;
    }
    return true;
}

此代码是不是的通用字符串比较,它是专门到已知良好的关键字进行比较的输入串。它将把{}如[]的大写,`为大写@,〜如大写^,但如果输入到这个函数一个保证包含无这些字符,那么也没什么关系。

它的目的是这样被使用

if (IsKeywordMatch(pszInput, "value"))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top