AnsiStrIComp терпит неудачу при сравнении строк в Delphi 2010
Я немного запутался и надеюсь на просветление.
Я использую Delphi 2010 для этого проекта и пытаюсь сравнить 2 строки.
Использование кода ниже не удается
if AnsiStrIComp(PAnsiChar(sCatName), PAnsiChar(CatNode.CatName)) = 0 then...
Потому что в соответствии с отладчиком сравнивается только первый символ каждой строки (т. е. если sCatName
"Automobiles"
, PAnsiChar(sCatName)
ИС "A"
).
В этом случае я ищу совпадение, но у меня есть другие функции, используемые для сортировки и т. д. где мне нужно знать, как сравниваются строки (меньше, равно, больше).
2 ответа:
Я предполагаю, что
sCatName
иCatNode.CatName
определены какstring
s (=UnicodeString
s)?. Так и должно быть.Нет необходимости преобразовывать строки в строки с нулевым завершением! Это вам (в основном) нужно делать только при работе с Windows API.
Если вы хотите проверить равенство двух строк, используйте
SameStr(S1, S2)
(чувствительное к регистру соответствие) илиSameText(S1, S2)
(нечувствительное к регистру соответствие), или простоS1 = S2
в первом случае. Все три варианта возвращаютtrue
илиfalse
, в зависимости от равенства строк.Если вы хотите получить числовое значение, основанное на порядковых значениях символов (как при сортировке), затем используйте
CompareStr(S1, S2)
илиCompareText(S1, S2)
. Они возвращают отрицательное целое число, ноль или положительное целое число.(Возможно, вы захотите использовать функции
Ansi-
:AnsiSameStr
,AnsiSameText
,AnsiCompareStr
, иAnsiCompareText
; эти функции будут использовать текущую локаль. НеAnsi-
функции будут принимать третий, необязательный параметр, явно указывающий используемую локаль.)Обновление
Пожалуйста, прочтите Реми Лебо. комментарии относительно причины проблемы.