lstrcmpW в Windows 9x
От: _nn_  
Дата: 20.07.04 13:41
Оценка:
Как можно такое провернуть ?

Unicows или всякие дополнительные библиотеки прошу не предлагать.

Спасибо.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: lstrcmpW в Windows 9x
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.07.04 13:59
Оценка:
Здравствуйте, _nn_, Вы писали:

Если интересует равно/не равно, а не больше/меньше, то можно и lstrcmpW+memcmp использовать.
Можно самому в цикле по 2 байта считывать и сверять.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: lstrcmpW в Windows 9x
От: lubichevav  
Дата: 20.07.04 14:07
Оценка:
Здравствуйте, _nn_

А если wcscmp?

с.ув. Александр
Re[2]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 20.07.04 14:09
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, _nn_, Вы писали:


A>Если интересует равно/не равно, а не больше/меньше, то можно и lstrcmpW+memcmp использовать.

A>Можно самому в цикле по 2 байта считывать и сверять.

lstrcmpW не существует в Win 9x, а memcmp(wmemcmp) не работает как надо.

Пока я пользуюсь переводом в обычную строки и сравнение через lstrcmpA , но это не то, нужна функциональность lstrcmpW.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 20.07.04 14:12
Оценка:
Здравствуйте, lubichevav, Вы писали:

L>Здравствуйте, _nn_


L>А если wcscmp?

Эта функция работает по подобию wmemcmp и работает не так как lstrcmpW.

L>с.ув. Александр
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: lstrcmpW в Windows 9x
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.07.04 14:17
Оценка:
Здравствуйте, _nn_, Вы писали:

A>>Если интересует равно/не равно, а не больше/меньше, то можно и lstrcmpW+memcmp использовать.

A>>Можно самому в цикле по 2 байта считывать и сверять.

__>lstrcmpW не существует в Win 9x, а memcmp(wmemcmp) не работает как надо.


Опечатка была lstrlenW+memcmp
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 20.07.04 14:20
Оценка:
Здравствуйте, 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, как не ожидалось
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: lstrcmpW в Windows 9x
От: lubichevav  
Дата: 20.07.04 14:39
Оценка:
Ну можно накрайняк самому эту (lstrcmpW) функцию написать.

L>>с.ув. Александр
Re[4]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 20.07.04 14:42
Оценка:
Здравствуйте, lubichevav, Вы писали:

L>Ну можно накрайняк самому эту (lstrcmpW) функцию написать.


L>>>с.ув. Александр


Но только перебирать всю таблицу символов с дальнейщей обработкой не очень будет приятно
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: lstrcmpW в Windows 9x
От: Stanky  
Дата: 20.07.04 18:36
Оценка:
> Как можно такое провернуть ?
>
Создаётся массив весом 64КБ в котором все буквы записаны в верхнем/нижнем регистре — полный набор символов UNICODE!!! Затем допустим есть две строки: "Аб" и "аБ", считаем значение символов, как индекс в массиве!!! Если значения по индексам "А" и "а" совпали, то символы равны!!! Ну и т. д. и т. п....

Иного способа сделать быстрое сравнение без учёта регистра при наших корявых кодовых таблицах я не вижу!!!
Posted via RSDN NNTP Server 1.9 beta
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[2]: lstrcmpW в Windows 9x
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.07.04 18:57
Оценка:
Здравствуйте, Stanky, Вы писали:

>> Как можно такое провернуть ?

>>
S>Создаётся массив весом 64КБ в котором все буквы записаны в верхнем/нижнем регистре — полный набор символов UNICODE!!!

Полный набор это 1112064 символов.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: lstrcmpW в Windows 9x
От: c-smile Канада http://terrainformatica.com
Дата: 20.07.04 21:14
Оценка:
Здравствуйте, _nn_, Вы писали:

Используй wcscoll

Она исп. CompareStringW или CompareStringA (+ WideCharToMultiByte) в зависимости от платформы
Re[3]: lstrcmpW в Windows 9x
От: Stanky  
Дата: 20.07.04 21:22
Оценка:
> Полный набор это 1112064 символов.
>
Ну и что?
И кстати — цифра точно не правильная, максиму 65536!!!
Posted via RSDN NNTP Server 1.9 beta
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re: lstrcmpW в Windows 9x
От: AlexBS Украина  
Дата: 20.07.04 21:25
Оценка:
Здравствуйте, _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КБ)
Re[2]: lstrcmpW в Windows 9x
От: asheff Украина  
Дата: 20.07.04 21:30
Оценка:
> Используй wcscoll
>
Вот так вот — век живи, век учись — я часто использую wcscpy и прочие — и даже не задумывался, что оно может неправильно работать! Точнее — работает не совсем так как я предполагаю Я честно говоря, предполагал, что в уникоде символы правильно расположены (типа, код буквы Ё больше кода буквы A).
А оказывается — еще и локаль надо выставлять — чтобы правильно сравнивались уникодные символы.
Posted via RSDN NNTP Server 1.8
Re[4]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 21.07.04 06:48
Оценка: +1
Здравствуйте, Stanky, Вы писали:

>> Полный набор это 1112064 символов.

>>
S>Ну и что?
S>И кстати — цифра точно не правильная, максиму 65536!!!

Ошибаетесь.
Дело в том что есть несколько стандартов Unicode, так вот по последнему количество символов больше чем 65536 так как размер символа Unicode не 2, а 4 байта.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 21.07.04 07:22
Оценка:
Здравствуйте, AlexBS, Вы писали:

ABS>Тут используеться и CompareStringW (которой, как не удивительно, тоже нет). Если действительно нужно, оставь мыло, скину весь исходник по работе со строками (там ~130КБ)


Спасибо.
nn-mail@bk.ru
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: lstrcmpW в Windows 9x
От: lubichevav  
Дата: 21.07.04 07:32
Оценка: 6 (2)
Здравствуйте, _nn_

А если StrCmpW или ChrCmpIW, это функции шелла
(правда насчет поддержки UNICODE в Windows 9x я не знаю , но можно попробовать)

с.ув. Александр
Re[2]: lstrcmpW в Windows 9x
От: _nn_  
Дата: 21.07.04 11:11
Оценка:
Здравствуйте, lubichevav, Вы писали:

L>Здравствуйте, _nn_


L>А если StrCmpW или ChrCmpIW, это функции шелла

L>(правда насчет поддержки UNICODE в Windows 9x я не знаю , но можно попробовать)

L>с.ув. Александр


Единственное ограничение которое я нашел так это поддержка IE 4.0.

Наверное это то что надо.
Осталось только убедиться что на Windows 9x работает корректно.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: lstrcmpW в Windows 9x
От: adontz Грузия http://adontz.wordpress.com/
Дата: 21.07.04 13:46
Оценка:
Здравствуйте, Stanky, Вы писали:

S>И кстати — цифра точно не правильная, максиму 65536!!!

Так. Идём на unicode.org и читаем главу 3 стандарта. или ещё где-нибудь читаем про суррогаты (surrogates)
A journey of a thousand miles must begin with a single step © Lau Tsu
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.