AnsiStrIComp терпит неудачу при сравнении строк в Delphi 2010


Я немного запутался и надеюсь на просветление.

Я использую Delphi 2010 для этого проекта и пытаюсь сравнить 2 строки.

Использование кода ниже не удается

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

Потому что в соответствии с отладчиком сравнивается только первый символ каждой строки (т. е. если sCatName "Automobiles", PAnsiChar(sCatName) ИС "A").

Я хочу иметь возможность сравнивать строки, которые могут быть на разных языках,например, английский и японский.

В этом случае я ищу совпадение, но у меня есть другие функции, используемые для сортировки и т. д. где мне нужно знать, как сравниваются строки (меньше, равно, больше).

2 3

2 ответа:

Я предполагаю, что sCatName и CatNode.CatName определены как strings (= UnicodeStrings)?. Так и должно быть.

Нет необходимости преобразовывать строки в строки с нулевым завершением! Это вам (в основном) нужно делать только при работе с Windows API.

Если вы хотите проверить равенство двух строк, используйте SameStr(S1, S2) (чувствительное к регистру соответствие) или SameText(S1, S2) (нечувствительное к регистру соответствие), или просто S1 = S2 в первом случае. Все три варианта возвращают true или false, в зависимости от равенства строк.

Если вы хотите получить числовое значение, основанное на порядковых значениях символов (как при сортировке), затем используйте CompareStr(S1, S2) или CompareText(S1, S2). Они возвращают отрицательное целое число, ноль или положительное целое число.

(Возможно, вы захотите использовать функции Ansi- : AnsiSameStr, AnsiSameText, AnsiCompareStr, и AnsiCompareText; эти функции будут использовать текущую локаль. Не Ansi- функции будут принимать третий, необязательный параметр, явно указывающий используемую локаль.)

Обновление

Пожалуйста, прочтите Реми Лебо. комментарии относительно причины проблемы.

А как насчет простого sCatName=CatNode.CatName? Если они strings, это должно сработать.