代码之家  ›  专栏  ›  技术社区  ›  peterchen

两个TCHAR的不区分大小写比较

  •  2
  • peterchen  · 技术社区  · 15 年前

    比较两个单独字符(或两个字符)的好方法是什么 char 或者UTF-16 wchar_t s) 忽视案件?

    一个简单的实现可以是大写或小写。这些方法中有一种被认为更好,还是有其他方法?

    我理解,不可能对Unicode的所有细节进行完全正确的比较。这种比较主要是为了对配置文件和微语法进行一些基本的解析,因此不需要完美。我正在寻找一个在每个字符比较的限制下不太错误的实现。

    [编辑]
    这些配置文件可能包含显示给用户的文本。此外,在分析用户输入时,我无法避免unicode文本。

    4 回复  |  直到 15 年前
        1
  •  3
  •   bmargulies    15 年前

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

        2
  •  1
  •   Windows programmer    14 年前

        3
  •  0
  •   MSN    15 年前

    如果需要基于ASCII的不区分大小写的比较,请不要对配置文件使用Unicode。对这些文件使用ASCII。那么你就不必担心地区了。

        4
  •  0
  •   John Knoeller    15 年前

    如果您要限制自己使用英语(ASCII)关键字,那么有一种简单的方法来进行比较。如果你想在关键词中使用A-Z以外的字母,这并不能概括,但它对A-Z却非常有效。

    如果您保证传递给此函数的值之一是已知良好的关键字字符串,该字符串仅包含ASCII范围32-127(a-Z、a-Z、0-9、大多数符号)中的可见字符,则可以执行简单的位屏蔽以将小写转换为大写。

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

    一个通用的字符串比较,它专门用来比较一个已知的好关键字和一个输入字符串。它将{}视为[]、`as uppercase@、~视为uppercase^的大写字母,但如果此函数的一个输入保证不包含任何这些字符,则这无关紧要。

    它的用意是这样的

    if (IsKeywordMatch(pszInput, "value"))