在不考虑区域设置的情况下处理不区分大小写

时间:2017-08-08 07:50:32

标签: c++ windows visual-studio case-insensitive

我正在研究在我的应用程序中处理不区分大小写的问题。到目前为止,我意识到有两种不同的情况:

  1. 数据可视化给用户
  2. 数据在内部处理
  3. 对于案例1,您应始终使用用户的语言环境。这意味着,例如在对列表中的项进行排序时,如果您希望这种情况不区分大小写,那么您应该使用区域设置感知的不区分大小写的字符串比较函数。

    对于案例2,您不希望使用用户的语言环境似乎是合乎逻辑的,因为如果您的用户使用不同的语言环境但仍使用相同的数据集(例如,如果您正在管理库),则会产生不良影响软件,您可以使用本书的名称作为数据库中图书实例的关键,并希望处理这种不区分大小写(这是一种简化,我知道)。)

    当使用STL容器(比如std :: map)时,我注意到将密钥置于大写然后对大写搜索值执行查找效率更高。这比在地图上循环时执行不区分大小写的比较更有效。对于std :: unordered_map,可能需要这样做。

    然而,我意识到这也可能有奇怪的效果,我想知道Windows(也使用不区分大小写的文件名)如何处理这些情况。

    E.g。德语字符ß(ringel-S)以大写字母写成SS。这似乎意味着ß.txt和SS.txt应该表示相同的文件,因此ßs.txt和sß.txt以及sss.txt和SSS.txt也应该表示相同的文件。但在我的实验中,在Windows中似乎并非如此。

    所以我的问题:

    • 应该使用哪些C ++和/或Windows函数来执行与区域设置无关的不区分大小写的字符串比较?
    • 应该使用哪些C ++和/或Windows函数来使字符串无表壳(例如将其置于大写),因此在std :: map中执行查找时,比较更有效(或者甚至可以进行哈希处理)使用std :: unordered_map)?
    • 关于内部(即非可视化相关)数据的不区分大小写的字符串处理的任何其他经验(或文档链接)?

0 个答案:

没有答案