gpt4 book ai didi

delphi - Delphi 字符串比较函数有什么区别?

转载 作者:行者123 更新时间:2023-12-03 15:09:13 32 4
gpt4 key购买 nike

在现代 Delphi(例如 2010-XE3)中,您可以通过多种方式比较字符串:

  • '<=' 运算符解析为 UStrCmp/LStrCmp
  • 比较Str
  • AnsiCompareStr

有人可以给出(或指出)这些方法原则上的作用吗?

到目前为止,我认为 AnsiCompareStr 在 Windows 上调用 CompareString,这是一个“文本”比较(即考虑 unicode 组合字符等)。简单的 CompareStr 不会这样做,而是似乎会进行二进制比较。

但是 CompareStr 和 UStrCmp 之间有什么区别?在 UStrCmp 和 LStrCmp 之间?它们都产生相同的结果吗?这些结果在不同的 Delphi 版本之间会发生变化吗?

我这么问是因为我需要进行始终产生相同结果的比较,以便使用一个版本的 Delphi 构建的应用程序中的索引与使用另一个版本构建的代码保持一致。

最佳答案

AnsiCompareStr被指定为考虑区域设置,并且无论 Delphi 版本如何都应返回相同的结果,但可能根据 Windows 版本和/或设置返回不同的结果。 CompareStr是纯二进制比较:“比较操作基于每个字符的 16 位序数值,不受当前区域设置的影响”(对于 CompareStr(const S1, S2: string)重载)。 UStrCmp还使用纯二进制比较:“根据组成字符串的字符的序数值来比较字符串。”所以后两者不应该有区别。它们返回结果的方式不同,因此需要两种实现(尽管可以使一个实现依赖于另一个实现)。

至于LStrCmpUStrCmp之间的区别,LStrCmp采用AnsiStringUStrCmp 接受 UnicodeString。完全有可能两个字符(假设 A 和 B)在错误命名的“ANSI”代码页中排序为 A < B,但在 Unicode 中排序为 A > B。您几乎应该始终只使用适合数据的比较你有。

关于delphi - Delphi 字符串比较函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895971/

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