Delphi中字符串的CompareStr和'='之间的区别

时间:2011-06-23 10:11:57

标签: delphi

我只是想知道CompareStr=之间用于比较Delphi中的字符串的区别。两者都产生相同的结果。

if(str2[i] = str1[i]) then
  ShowMessage('Palindrome')

if(CompareStr(str2[i], str1[i]) = 0) then
  ShowMessage('Palindrome')

两个都显示消息Palindrome。

4 个答案:

答案 0 :(得分:18)

当您只想查看两个字符串是否相等时,以及当您想知道一个字符串相对于另一个字符串的比较时,请不要使用CompareStr。如果第一个参数首先出现在asciibetically,它将返回一个小于0的值,如果第一个参数在之后属于,它将返回一个大于零的值。

如果没有CompareStr,您可能会遇到以下代码:

if str1[i] = str2[i] then begin
  // They're equal
end else if str1[i] < str2[i] then begin
  // str1 comes first
end else begin
  // str2 comes first
end;

两次比较str1str2。使用CompareStr,您可以删除其中一个字符串比较并将其替换为更便宜的整数比较:

x := CompareStr(str1[i], str2[i]);
if x = 0 then begin
  // They're equal
end else if x < 0 then begin
  // str1 comes first
end else begin
  // str2 comes first
end;

As Gerry's answer解释说,该函数在排序函数时特别有用,特别是因为它与CompareTextAnsiCompareStr等其他比较函数具有相同的接口。排序函数是template method,每个函数都用作比较strategy

如果您只想测试相等性,请使用=运算符 - 它更易于阅读。当您需要提供额外功能时,请使用CompareStr

答案 1 :(得分:6)

假设Str1和Str2是字符串,而不是数组(或列表)或字符串,第一个版本将更有效,因为第二个版本将首先将str1[i]str2[i]复制到两个新字符串,然后使用相关的开销调用函数。

第一个版本将简单地比较str1 [i]和str2 [i]

引用的单个字符

如果您只对字符串相同感兴趣,请使用=。如果你需要知道字符串是否相同,或者哪个字符串更大,那么使用CompareStr

在排序列表时,CompareStr特别有用,例如TList.Sort(CompareFunc)TStringList.Sort(CompareFunc)

如果您需要不区分大小写的比较,请使用CompareText。

答案 2 :(得分:1)

当比较字符串不相等时,结果不一样。 CompareStr或AnsiCompareStr的结果是Integer类型,从字面上显示这些字符串的比较信息。看看http://www.delphibasics.co.uk/RTL.asp?Name=AnsiCompareStr

答案 3 :(得分:1)

除了返回值(整数与布尔值)之外,从代码中可以看出,对于CompareStr,“比较操作基于每个字符的8位序数值,不受当前用户区域设置的影响”。因此,看起来CompareStr最初是FastCode例程的一部分,实质上是出于性能原因而开发的优化Ansi版本。我一直倾向于使用“=”,“&lt;”,“&gt;”等。