Вопрос по isdigit() isalpha()
От: AlexOOO  
Дата: 06.12.01 00:49
Оценка:
люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,
причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").
Re: Вопрос по isdigit() isalpha()
От: Orion  
Дата: 06.12.01 03:42
Оценка:
Здравствуйте AlexOOO, Вы писали:

AOOO>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,


Стандартно она определена для первой половины таблицы ASCII,
то есть для кодов 0x00 ... 0x7F.
Кириллица находится во второй половине, причем в разных кодировках по разному.
Re[2]: Вопрос по isdigit() isalpha()
От: Аноним  
Дата: 06.12.01 05:28
Оценка:
Здравствуйте Orion, Вы писали:

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


AOOO>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,


O>Стандартно она определена для первой половины таблицы ASCII,

O>то есть для кодов 0x00 ... 0x7F.
O>Кириллица находится во второй половине, причем в разных кодировках по разному.

это и так ясно,вопрос в том как решить проблему,просто неохота переписывать стандартные функции.
Re: Вопрос по isdigit() isalpha()
От: retalik www.airbandits.com/
Дата: 06.12.01 05:30
Оценка: 1 (1)
Здравствуйте AlexOOO, Вы писали:

AOOO>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,

AOOO>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").

Действительно, в isalpha() какой-то баг с локалью есть. Но в реализации для STL его нет, поэтому можно использовать isalpha оттуда:

    bool alpha = std::isalpha(test_char, std::locale("rus_rus.1251"));
Успехов,
Виталий.
Re[2]: Вопрос по isdigit() isalpha()
От: AlexOOO  
Дата: 06.12.01 05:52
Оценка:
Здравствуйте retalik, Вы писали:

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


AOOO>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,

AOOO>>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").

R>Действительно, в isalpha() какой-то баг с локалью есть. Но в реализации для STL его нет, поэтому можно использовать isalpha оттуда:


R>
R>    bool alpha = std::isalpha(test_char, std::locale("rus_rus.1251"));
R>


Спасибо,щас испытаююююююю.
Re[3]: Вопрос по isdigit() isalpha()
От: Аноним  
Дата: 06.12.01 08:22
Оценка:
Здравствуйте Аноним, Вы писали:

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


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


AOOO>>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,


O>>Стандартно она определена для первой половины таблицы ASCII,

O>>то есть для кодов 0x00 ... 0x7F.
O>>Кириллица находится во второй половине, причем в разных кодировках по разному.

А>это и так ясно,вопрос в том как решить проблему,просто неохота переписывать стандартные функции.


У меня подобная проблема возникала, была решена приведением аргумента к unsigned char.
Например:

 char c = 'Б'
 if(isdigit((unsigned char)c))
  ...

у меня работает. isalpha и прочие родственники лечатся аналогично.
Re: Вопрос по isdigit() isalpha()
От: OlegO Россия http://www.mediachase.ru
Дата: 06.12.01 09:42
Оценка:
Здравствуйте AlexOOO, Вы писали:

AOOO>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,

AOOO>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").

Используй ф-и которые для этого преднозначены :

IsCharAlpha()
IsCharAlphaNumeric()
IsCharLower()
IsCharUpper()

а не изжитки прошлого.
С уважением, OlegO.
Re[2]: Вопрос по isdigit() isalpha()
От: Аноним  
Дата: 06.12.01 11:25
Оценка:
Здравствуйте OlegO, Вы писали:

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


AOOO>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,

AOOO>>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").

OO>Используй ф-и которые для этого преднозначены :


OO>IsCharAlpha()

OO>IsCharAlphaNumeric()
OO>IsCharLower()
OO>IsCharUpper()

OO>а не изжитки прошлого.


Это все так только, если код предназначен для использования исключительно под Виндами и НИКОГДА не будет переносится на другие платформы (например, Unix). А если нет, то от Win API нужно избавляться по возможности, чтобы было меньше кусков типа #ifdef WINDOWS #ifdef UNIX и т.п., и использовать "изжитки прошлого", которые в отличие от Win API живут и побеждают на любой платформе.
Re[3]: Вопрос по isdigit() isalpha()
От: OlegO Россия http://www.mediachase.ru
Дата: 06.12.01 11:35
Оценка:
Здравствуйте Аноним, Вы писали:

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


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


AOOO>>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,

AOOO>>>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").

OO>>Используй ф-и которые для этого преднозначены :


OO>>IsCharAlpha()

OO>>IsCharAlphaNumeric()
OO>>IsCharLower()
OO>>IsCharUpper()

OO>>а не изжитки прошлого.


А>Это все так только, если код предназначен для использования исключительно под Виндами и НИКОГДА не будет переносится на другие платформы (например, Unix). А если нет, то от Win API нужно избавляться по возможности, чтобы было меньше кусков типа #ifdef WINDOWS #ifdef UNIX и т.п., и использовать "изжитки прошлого"


Ну если не под Win то это-то так, я не спорю.

А>, которые в отличие от Win API живут и побеждают на любой платформе.


Ну чесно, так как они работают, их давно бы пора переписать или забыть и не мучаться.
С уважением, OlegO.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.