AnsiStrIComp在Delphi 2010中无法比较字符串

时间:2010-07-17 14:47:04

标签: delphi unicode string delphi-2010

我有点困惑,希望得到启发。

我正在使用Delphi 2010进行此项目,我正在尝试比较2个字符串。

使用以下代码失败

if AnsiStrIComp(PAnsiChar(sCatName), PAnsiChar(CatNode.CatName)) = 0 then...

因为根据调试器,只比较每个字符串的第一个字符(即如果sCatName"Automobiles"PAnsiChar(sCatName)"A")。

我希望能够比较可能使用不同语言的字符串,例如英语与日语。

在这种情况下,我正在寻找一个匹配,但我有其他函数用于排序等,我需要知道字符串如何比较(小于,等于,大于)。

2 个答案:

答案 0 :(得分:5)

我认为sCatNameCatNode.CatName被定义为string s(= UnicodeString s)?他们应该是。

无需将字符串转换为以null结尾的字符串!这(大多数情况下)只需要在使用Windows API时进行。

如果要测试两个字符串的相等性,请使用SameStr(S1, S2)(区分大小写的匹配)或SameText(S1, S2)(不区分大小写的匹配),或在第一种情况下使用S1 = S2。所有三个选项都返回truefalse,具体取决于字符串相等。

如果您想根据字符的序数值(如排序)获取数值,请使用CompareStr(S1, S2)CompareText(S1, S2)。它们返回负整数,零或正整数。

(您可能希望使用Ansi-函数:AnsiSameStrAnsiSameTextAnsiCompareStrAnsiCompareText;这些函数将使用当前的区域设置。非Ansi-函数将接受第三个可选参数,明确指定要使用的语言环境。)

更新

请阅读Remy Lebeau关于问题原因的评论。

答案 1 :(得分:0)

简单sCatName=CatNode.CatName怎么样?如果它们是strings则应该有效。