C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сравнить строки  (Прочитано 1282 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Сравнить строки
« : 14 Июль 2015, 11:40:54 »

Как правильно сравнить такие строки?:
String FIOinGrid   = L"Еременко21 Еремей21 Иванович21";
String FIOinBAZA = L"Еременко21 Еремей21 Иванович21";
int check = CompareStr(FIOinGrid,FIOinBAZA);
Тут check равно 0. Все правильно.

Если написать так:
Код
String FIOinGrid = Trim(UniMainModule()->ClientDataSetUsersForAdmin->FieldByName(L"fam")->AsString + " " +
UniMainModule()->ClientDataSetUsersForAdmin->FieldByName(L"name")->AsString + " " +
UniMainModule()->ClientDataSetUsersForAdmin->FieldByName(L"name")->AsString);
 
String FIOinBAZA = Trim(UniMainModule()->FDQueryCheckUserDuble->FieldByName(L"fam")->AsString + " " +
UniMainModule()->FDQueryCheckUserDuble->FieldByName(L"name")->AsString + " " +
UniMainModule()->FDQueryCheckUserDuble->FieldByName(L"otchestvo")->AsString);

В точке останова убедиться что обе переменные равны Еременко21 Еремей21 Иванович21

Однако в этом случае check равно -3. Почему?

Записан
OVE
Участник


Сказали спасибо: +67/-0
Offline

Сообщений: 72


Re: Сравнить строки
« Ответ #1 : 14 Июль 2015, 12:13:18 »

В первой строке у Вас два раза поле name суммируется.
И, чтобы наверняка отсечь конечные пробелы, попробуйте так:
Код:
String FIOinGrid = Trim(UniMainModule()->ClientDataSetUsersForAdmin->FieldByName(L"fam")->AsString) + " " +
Trim(UniMainModule()->ClientDataSetUsersForAdmin->FieldByName(L"name")->AsString) + " " +
Trim(UniMainModule()->ClientDataSetUsersForAdmin->FieldByName(L"otchestvo")->AsString);
 
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Сравнить строки
« Ответ #2 : 14 Июль 2015, 13:02:42 »

Именно CompareStr (против к примеру AnsiCompareStr) возвращает не просто -1/1 в случае неравенства.
Возвращает вообще хрен знает что, но если начальная часть строк одинакова, но вторая на сколько-то лишних символов длиннее, то результа - разница в длине.
"pOv the best" и "pov the best" имеют результатом аж -32 (т.е. разницу кодов 'o' и 'O')
"pov the best" и "pov the best123" имеют результатом -3

Раз там -3, то и строки не одинаковые.

P.S. В силу невнятности результата CompareStr лучше использовать AnsiCompareStr - возвращает 0 или +-1 вне зависимости от структуры строк.
« Последнее редактирование: 14 Июль 2015, 14:51:44 от POV » Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #3 : 14 Июль 2015, 14:37:32 »

Огромное спасибо. 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.124 секунд. Запросов: 19.