| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > макрос/функция Isalpha (ctype.h) |
| Автор: Quanzi 25.12.2006, 16:33 |
| Нужно заставить этот макрос понимать русский. Я собственно знаю, как это сделать теоретически, но есть ли у кого-нибудь уже готовое? А то писать проверки для всех кодировок не хочется... <locale> не подошло, ибо невозможно его использовать с кодом в С. Что-то аналогичное для С есть? Компилятор - Visual Studio 6. |
| Автор: witex 25.12.2006, 18:54 |
| можно попробываться вначале перевести CharToOem а потом уже проверять через IsAlpha проверять! |
| Автор: Earnest 25.12.2006, 19:04 |
| setlocale из <locale.h> - это C. |
| Автор: Quanzi 25.12.2006, 22:28 | ||||
Можно пример? Просто сижу тыкаюсь... может и доберусь до того, как делать, но боюсь нескоро c:\program files\microsoft visual studio\vc98\include\eh.h(32) : fatal error C1189: #error : "eh.h is only for C++!" - вот что выдает вообще файл <locale>... <clocale> такого не выдает. Так... как подключить и создать локаль - понял. Методом профессора Тыка. Теперь непонятно - на
Я понимаю, что надо где-то найти функцию с двумя параметрами, но ГДЕ? Пример, плз |
| Автор: Earnest 26.12.2006, 08:32 |
| Ты перепутал локали из стандартной библиотеки C++ и СRT. Они действительно похожи, но не совсем: в CRT есть только одна общая локаль, которую нужно установить функцией setlocale. Подключать надо <locale.h>, а не <locale>. Последняя - это как раз c++. Сначала вызови setlocale, чтобы установить нужную локаль, потом используй макрос isalpha, который имеет только один аргумент - проверяемый символ. Примера, извини, под рукой нет. |
| Автор: Quanzi 26.12.2006, 08:47 |
| Благодарю. А какая локаль русская? .866? или russian_russian? Название интересует, ибо не знаю |
| Автор: Earnest 26.12.2006, 08:54 |
| В зависимости от кодировки: если Windows, то russian. И еще, второй аргумент можно поставить LC_ALL, конечно, но тогда и другие региональные настройки (вывод даты, дес. точка и прочее изменятся, что, по-моему, не очень удобно). Но можно тпоставить олько специфический, для сравнения строк, LC_COLLATE, кажется. |
| Автор: Quanzi 26.12.2006, 09:07 |
| Спасибо... Нда... понял, почему в каком-то из прошлых постов писали про траблы с символами. Локаль меняет кодировку - и Си начинает вызывать вместо 'ъ', например, всякие спецсимволы. Буду думать как починить... |
| Автор: Quanzi 26.12.2006, 14:19 |
| Методом Тыка - для русских символов в Си нормально работает setlocale(LC_ALL,".866"). Проблема осталась другая, перенесу в другой топик... |