Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Как сравнить 2 строки case insensitive ?  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3355
white_nigger,

А кто нормализацию не делает тот ссзб
27 дек 18, 17:28    [21775040]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
Valery_B
_Vasilisk_
А вы переводите по 4К

rgreat
Если вопрс упирается в быстродействие - сначала сравни длину строк а потом сравнивай их по частям. По 100*(номер итерации) символов, к примеру.

Вопрос - т.е. сравнение case insensitive я должен писать с нуля?

На C# пишется так:
var s = "Всем Привет";
if (s.Equals("всем привет", StringComparison.InvariantCultureIgnoreCase) == true)
    return "equal";
else
    return "not equal";

Результат:
equal

И в Delphi так можно
var
  b: Boolean;
begin
  b := string.Compare('Папа', 'папа', [TCompareOption.coIgnoreCase]) = 0;
27 дек 18, 17:44    [21775070]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2023
Kazantsev Alexey
А кто нормализацию не делает тот ссзб Картинка с другого сайта.
Не всегда нужно. Про NFKD и NFKC вообще не так много кто знает, а AnsiCompareText справиться с большинством ситуаций. Для экзотики уже пусть играются с флагами CompareStringW и CompareStringEx
27 дек 18, 17:59    [21775089]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
asviridenkov
Member

Откуда:
Сообщений: 3877
Kazantsev Alexey
JaDi
Если работать с английский/русским текстом будут проблемы когда-нибудь?

Если строки юникодовые то не будет.


Зря так думаешь
27 дек 18, 18:02    [21775092]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3355
asviridenkov
Зря так думаешь

Давай пример с проблемами.
27 дек 18, 18:03    [21775095]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
rgreat
Member

Откуда:
Сообщений: 4822
X-Cite
И в Delphi так можно
var
  b: Boolean;
begin
  b := string.Compare('Папа', 'папа', [TCompareOption.coIgnoreCase]) = 0;

Это в итоге вызов CompareString из WinAPI.
27 дек 18, 18:09    [21775098]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3355
rgreat
Это в итоге вызов CompareString из WinAP

AnsiCompare... тоже.
27 дек 18, 18:14    [21775104]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
rgreat
X-Cite
И в Delphi так можно
var
  b: Boolean;
begin
  b := string.Compare('Папа', 'папа', [TCompareOption.coIgnoreCase]) = 0;

Это в итоге вызов CompareString из WinAPI.

В C# это выльется в вызов CompareStringEx из WinApi
27 дек 18, 18:20    [21775112]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Гирлионайльдо
Member

Откуда:
Сообщений: 427
InternalCompareStringOrdinalIgnoreCase
27 дек 18, 19:12    [21775155]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14084
Фигня это всё. Вы опечатки отловите, а Чувствительность к регистру символов дело поправимое
27 дек 18, 19:38    [21775185]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
Гирлионайльдо
InternalCompareStringOrdinalIgnoreCase

Это в Mono... Я только что проверил, в консольном приложении на .Net идет вызов CompareStringEx
27 дек 18, 20:04    [21775218]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1889
X-Cite
string.Compare('Папа', 'папа', [TCompareOption.coIgnoreCase]) = 0;

ок, так у буду делать.
Но сравнение с нулём выглядит как-то не понятно.
X-Cite
В C# это выльется в вызов CompareStringEx из WinApi

Не верное утверждение для .NET
Ты не можешь точно знать, что там он в результате сделает, да это и не нужно знать.
Это зависит от конкретной связки версии ОС + .NET
NET.Core может вызывать другую функцию.
28 дек 18, 09:23    [21775442]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить 2 строки case insensitive ?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1300
Valery_B
X-Cite
string.Compare('Папа', 'папа', [TCompareOption.coIgnoreCase]) = 0;

ок, так у буду делать.
Но сравнение с нулём выглядит как-то не понятно.
X-Cite
В C# это выльется в вызов CompareStringEx из WinApi

Не верное утверждение для .NET
Ты не можешь точно знать, что там он в результате сделает, да это и не нужно знать.
Это зависит от конкретной связки версии ОС + .NET
NET.Core может вызывать другую функцию.


.Net Framework 4.5.1 Console Application вызывается CompareStringEx
.Net Core 2.2 Вызывает что-то свое, но активно юзает мультибайтовые winapi

К сообщению приложен файл. Размер - 57Kb
28 дек 18, 14:09    [21775745]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить