Здравствуйте, adontz, Вы писали:
A>Здравствуйте, _nn_, Вы писали:
A>Если интересует равно/не равно, а не больше/меньше, то можно и lstrcmpW+memcmp использовать. A>Можно самому в цикле по 2 байта считывать и сверять.
lstrcmpW не существует в Win 9x, а memcmp(wmemcmp) не работает как надо.
Пока я пользуюсь переводом в обычную строки и сравнение через lstrcmpA , но это не то, нужна функциональность lstrcmpW.
Здравствуйте, lubichevav, Вы писали:
L>Здравствуйте, _nn_
L>А если wcscmp?
Эта функция работает по подобию wmemcmp и работает не так как lstrcmpW.
L>с.ув. Александр
Здравствуйте, _nn_, Вы писали:
A>>Если интересует равно/не равно, а не больше/меньше, то можно и lstrcmpW+memcmp использовать. A>>Можно самому в цикле по 2 байта считывать и сверять.
__>lstrcmpW не существует в Win 9x, а memcmp(wmemcmp) не работает как надо.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, _nn_, Вы писали:
A>>>Если интересует равно/не равно, а не больше/меньше, то можно и lstrcmpW+memcmp использовать. A>>>Можно самому в цикле по 2 байта считывать и сверять.
__>>lstrcmpW не существует в Win 9x, а memcmp(wmemcmp) не работает как надо.
A>Опечатка была lstrlenW+memcmp
Не то...
Вообщем конкретный пример
wchar_t x[]=L"А"; // А - русскоеwchar_t y[]=L"Ё";
lstrcmpW(x,y) возврашает -1 как и ожидалось.
memcmp, wmemcmp и всякое похожее возвращают 1, как не ожидалось
> Как можно такое провернуть ? >
Создаётся массив весом 64КБ в котором все буквы записаны в верхнем/нижнем регистре — полный набор символов UNICODE!!! Затем допустим есть две строки: "Аб" и "аБ", считаем значение символов, как индекс в массиве!!! Если значения по индексам "А" и "а" совпали, то символы равны!!! Ну и т. д. и т. п....
Иного способа сделать быстрое сравнение без учёта регистра при наших корявых кодовых таблицах я не вижу!!!
Posted via RSDN NNTP Server 1.9 beta
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Здравствуйте, Stanky, Вы писали:
>> Как можно такое провернуть ? >> S>Создаётся массив весом 64КБ в котором все буквы записаны в верхнем/нижнем регистре — полный набор символов UNICODE!!!
Здравствуйте, _nn_, Вы писали:
__>Как можно такое провернуть ?
__>Unicows или всякие дополнительные библиотеки прошу не предлагать.
__>Спасибо.
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
lcompat.c
Abstract:
This module implements the _l and l compatability functions
like _lread, lstrlen...
Author:
Mark Lucovsky (markl) 13-Mar-1991
Revision History:
--*/
...
...
int
APIENTRY
lstrcmpW(
LPCWSTR lpString1,
LPCWSTR lpString2
)
{
int retval;
retval = CompareStringW( GetThreadLocale(),
0,
lpString1,
-1,
lpString2,
-1 );
if (retval == 0)
{
//
// The caller is not expecting failure. Try the system
// default locale id.
//
retval = CompareStringW( GetSystemDefaultLCID(),
0,
lpString1,
-1,
lpString2,
-1 );
}
if (retval == 0)
{
if (lpString1 && lpString2)
{
//
// The caller is not expecting failure. We've never had a
// failure indicator before. We'll do a best guess by calling
// the C runtimes to do a non-locale sensitive compare.
//return ( wcscmp(lpString1, lpString2) );
}
else if (lpString1)
{
return (1);
}
else if (lpString2)
{
return (-1);
}
else
{
return (0);
}
}
return (retval - 2);
}
...
...
Тут используеться и CompareStringW (которой, как не удивительно, тоже нет). Если действительно нужно, оставь мыло, скину весь исходник по работе со строками (там ~130КБ)
> Используй wcscoll >
Вот так вот — век живи, век учись — я часто использую wcscpy и прочие — и даже не задумывался, что оно может неправильно работать! Точнее — работает не совсем так как я предполагаю Я честно говоря, предполагал, что в уникоде символы правильно расположены (типа, код буквы Ё больше кода буквы A).
А оказывается — еще и локаль надо выставлять — чтобы правильно сравнивались уникодные символы.
Здравствуйте, Stanky, Вы писали:
>> Полный набор это 1112064 символов. >> S>Ну и что? S>И кстати — цифра точно не правильная, максиму 65536!!!
Ошибаетесь.
Дело в том что есть несколько стандартов Unicode, так вот по последнему количество символов больше чем 65536 так как размер символа Unicode не 2, а 4 байта.
Здравствуйте, AlexBS, Вы писали:
ABS>Тут используеться и CompareStringW (которой, как не удивительно, тоже нет). Если действительно нужно, оставь мыло, скину весь исходник по работе со строками (там ~130КБ)
Здравствуйте, lubichevav, Вы писали:
L>Здравствуйте, _nn_
L>А если StrCmpW или ChrCmpIW, это функции шелла L>(правда насчет поддержки UNICODE в Windows 9x я не знаю , но можно попробовать)
L>с.ув. Александр
Единственное ограничение которое я нашел так это поддержка IE 4.0.
Наверное это то что надо.
Осталось только убедиться что на Windows 9x работает корректно.
Здравствуйте, Stanky, Вы писали:
S>И кстати — цифра точно не правильная, максиму 65536!!!
Так. Идём на unicode.org и читаем главу 3 стандарта. или ещё где-нибудь читаем про суррогаты (surrogates)