люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,
причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").
Здравствуйте 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>Кириллица находится во второй половине, причем в разных кодировках по разному.
это и так ясно,вопрос в том как решить проблему,просто неохота переписывать стандартные функции.
Здравствуйте AlexOOO, Вы писали:
AOOO>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами, AOOO>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").
Действительно, в isalpha() какой-то баг с локалью есть. Но в реализации для STL его нет, поэтому можно использовать isalpha оттуда:
Здравствуйте retalik, Вы писали:
R>Здравствуйте AlexOOO, Вы писали:
AOOO>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами, AOOO>>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").
R>Действительно, в isalpha() какой-то баг с локалью есть. Но в реализации для STL его нет, поэтому можно использовать isalpha оттуда:
R>
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Orion, Вы писали:
O>>Здравствуйте AlexOOO, Вы писали:
AOOO>>>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами,
O>>Стандартно она определена для первой половины таблицы ASCII, O>>то есть для кодов 0x00 ... 0x7F. O>>Кириллица находится во второй половине, причем в разных кодировках по разному.
А>это и так ясно,вопрос в том как решить проблему,просто неохота переписывать стандартные функции.
У меня подобная проблема возникала, была решена приведением аргумента к unsigned char.
Например:
char c = 'Б'
if(isdigit((unsigned char)c))
...
у меня работает. isalpha и прочие родственники лечатся аналогично.
Здравствуйте AlexOOO, Вы писали:
AOOO>люди подскажите pls, почему используя isalpha() возникают проблемы с русскими символами, AOOO>причем часть символов проходит нормально, а на такие как 'а', 'ы', 'я' ругается (кодировка устанавливалась как "Russian.1251").
Здравствуйте 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 живут и побеждают на любой платформе.
Здравствуйте Аноним, Вы писали:
А>Здравствуйте 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 живут и побеждают на любой платформе.
Ну чесно, так как они работают, их давно бы пора переписать или забыть и не мучаться.