我只想知道在Delphi中比较字符串时CompareStr
和=
之间的区别。它们都产生相同的结果。
if(str2[i] = str1[i]) then
ShowMessage('Palindrome')
if(CompareStr(str2[i], str1[i]) = 0) then
ShowMessage('Palindrome')
两者均显示“回文”消息。
我只想知道在Delphi中比较字符串时CompareStr
和=
之间的区别。它们都产生相同的结果。
if(str2[i] = str1[i]) then
ShowMessage('Palindrome')
if(CompareStr(str2[i], str1[i]) = 0) then
ShowMessage('Palindrome')
两者均显示“回文”消息。
当你想知道一个字符串相对于另一个字符串的位置时,使用CompareStr
,而不是仅仅想知道两个字符串是否相等。如果第一个参数在字母表中先出现,则它将返回小于0的值;如果第一个参数在第二个参数之后,则它将返回大于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;
这段代码比较了str1
和str2
两次。使用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;
正如 Gerry 的回答所解释的那样,该函数在排序函数中非常有用,特别是因为它具有与其他比较函数(如 CompareText
和 AnsiCompareStr
)相同的接口。排序函数是一个模板方法,每个函数都充当比较策略。
如果你只想测试相等性,请使用=
运算符——这更容易阅读。当需要额外的功能时,请使用CompareStr
。
str1[i]
和 str2[i]
复制到两个新字符串中,然后调用一个带有相关开销的函数。=
。如果您需要知道字符串是否相同或哪个字符串更大,请使用 CompareStr
。TList.Sort(CompareFunc)
或 TStringList.Sort(CompareFunc)
。CompareText
,加上 +1。不区分大小写很可能是不使用 =
的最重要原因。 - jpfollenius当比较的字符串不相等时,结果是不同的。CompareStr或AnsiCompareStr的结果是整数类型,显示更多关于这些字符串如何比较的信息。请查看http://www.delphibasics.co.uk/RTL.asp?Name=AnsiCompareStr。
==
用于调用CompareStr
函数。 - CodesInChaos=
。 - CodesInChaos
str1
和str2
是字符串数组。但也许不是这样的..... - David Heffernan