gpt4 book ai didi

c# - 字符串 (";P") 更大还是字符串 ("-_-") 更大?

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:26 28 4
gpt4 key购买 nike

我发现在对文本文件进行排序时非常困惑。不同的算法/应用程序会产生不同的结果,例如,比较两个字符串 str1=";P"str2="-_-"

仅供引用,这里给出了这些字符串中每个字符的 ASCII:

char(';') = 59;   char('P') = 80;
char('-') = 45; char('_') = 95;

所以我尝试了不同的方法来确定哪个字符串更大,这是我的结果:

  1. 在 Microsoft Office Excel 中排序命令:

    ";P"< "-_-"

  2. C++ std::string::compare(string &str2),即 str1.compare(str2)

    ";P"> "-_-"

  3. C# string.CompareTo(),即 str1.CompareTo(str2)

    ";P"< "-_-"

  4. C# string.CompareOrdinal(),即CompareOrdinal(w1, w2)

    ";P"> "-_-"

如图所示,结果各不相同!实际上我的直觉结果应该等于方法 2 和 4,因为 ASCII(';') = 59 大于 ASCII('-') = 45。

所以我不知道为什么 Excel 和 C# string.CompareTo() 会给出相反的答案。请注意,在 C# 中,第二个比较函数名为 string.CompareOrdinal()。这是否意味着默认的 C# string.CompareTo() 函数不是“Ordinal”?

谁能解释这种不一致?

谁能解释一下 CultureInfo = {en-US},为什么它告诉 ;P > -_-? 潜在的动机或原则是什么?我听说过不同的 cultureInfo 中有不同的双倍乘法。这更像是一种文化冲击......!

最佳答案

  1. ?
  2. std::string::compare :“字符比较的结果仅取决于其字符代码”。它只是有序的。
  3. String.CompareTo :“使用当前文化执行单词(区分大小写和区分文化)比较”。所以,这不是有序的,因为典型的用户不希望事情像那样排序。
  4. String::CompareOrdinal : 根据名称,“使用顺序排序规则执行区分大小写的比较”。

编辑:CompareOptions有一个提示:“例如,连字符 ("-") 可能会分配一个非常小的权重,以便“coop”和“co-op”在排序列表中彼此相邻出现。”

关于c# - 字符串 (";P") 更大还是字符串 ("-_-") 更大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com