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

Cyp*_*rUS 10 delphi

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

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

if(CompareStr(str2[i], str1[i]) = 0) then
  ShowMessage('Palindrome')
Run Code Online (Sandbox Code Playgroud)

两者都显示消息Palindrome.

Rob*_*edy 18

CompareStr当您只想查看两个字符串是否相等时,以及当您想知道一个字符串相对于另一个字符串的比较时,请不要使用.它将返回一个值小于0,如果第一自变量出现第一,asciibetically,它将返回大于零的值大,如果第一自变量属于的第二个.

没有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;
Run Code Online (Sandbox Code Playgroud)

相比之下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;
Run Code Online (Sandbox Code Playgroud)

正如Gerry的回答所解释的那样,该函数在排序函数时特别有用,特别是因为它具有与其他比较函数相同的接口,例如CompareTextAnsiCompareStr.排序函数是模板方法,每个函数都用作比较策略.

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


Ger*_*oll 6

假设STR1和STR2是字符串,而不是阵列(或列表)或串,第一个版本将是更有效的,如在第二版本将第一复制str1[i]str2[i]两个新的字符串,然后调用一个函数,与相关联的开销.

第一个版本将简单地比较str1 [i]和str2 [i]引用的单个字符

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

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

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

  • +1 为 `CompareText`。不区分大小写可能是不使用 `=` 的最重要原因。 (2认同)