strcmp()和strcoll()有什么区别?

Rec*_*ker 12 c c++ string locale

我尝试了解它们两个但我没有发现任何差异,除了strcoll() 这个参考说它

根据LC_COLLATE类别定义的当前语言环境比较两个空终止字符串.

在第二个想法,我知道我正在问另一个问题的详细答案,这个区域设置究竟是什么,对于C和C++?

Ale*_*lke 29

strcmp() 逐个获取字符串的字节,并将它们与字节进行比较.

strcoll()获取字节,使用语言环境转换它们,然后比较结果.转换根据语言重新排序.在法语中,强调的字母出现在非强调的字母之后.所以é是在e之后.但是,éf之前.strcoll()做对了.strcmp()不太好.

但是,在许多情况下strcmp()就足够了,因为您不需要在使用中显示以语言(语言环境)排序的结果.例如,如果您只需要快速访问由字符串索引的大量数据,则可以使用由该字符串索引的映射.对那些使用strcoll()通常非常慢的人进行排序可能完全没用(strcmp()至少与之相比).

有关字符的详细信息,您可能还需要查看Unicode网站.

关于语言环境,它是语言.默认情况下,它设置为"C"(或多或少,没有区域设置).选择位置后,将相应地设置区域设置.您还可以设置LC_LOCALE环境变量.实际上有很多这样的变数.但一般来说,您使用预定义函数自动将这些变量考虑在内并为您做正确的事情.(即格式化日期/时间,格式数/度量,计算大小写等)