AnsiStrIComp не удается сравнить строки в Delphi 2010 - PullRequest
3 голосов
/ 17 июля 2010

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

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

Использование приведенного ниже кода не работает

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 17 июля 2010

Я предполагаю, что 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-, примут третью , необязательный параметр, явно указывающий используемый языковой стандарт.)

Обновление

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

0 голосов
/ 17 июля 2010

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

...