PriN_ce Опубликовано 5 ноября, 2009 Жалоба Поделиться Опубликовано 5 ноября, 2009 Есть некая функция, написаная мною POS(аргумент), она делает транслит, т.е. например аргумент= Машина, то она преобразует ее => Mashina. НО! Всё это хорошо когда аргумент, тобиш переменная, задается в самом коде: char st[300]="Машина"; // POS(st) переведет ее в Mashina А нужно, чтобы само слово вводил чел, sсanf() ом или gets() ом или еще как.. Здесь и начинается проблема...грубо говоря "внешняя кодировка" отличается от той, где хранится код. Помогите пожалуйста решить сие проблема)setlocale() ? За одно и вопрос: в какой кодировке в С все "выполняется", а в какой "задается" челом? :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Lion HC Опубликовано 5 ноября, 2009 Жалоба Поделиться Опубликовано 5 ноября, 2009 Консоль использует ЕОМ-кодировку. Просто перед вызовом своей функции конвертируйте параметр функцией: BOOL OemToCharA( (LPCSTR)ЕОМ-строка из консоли, выходной масив аргумента ); Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
PriN_ce Опубликовано 5 ноября, 2009 Автор Жалоба Поделиться Опубликовано 5 ноября, 2009 Твою ж мать спасибо огромное)))) я над этой траблой часа 3 наверно думал...пц )))))фуф...гора с плеч) спасибо))) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Архимаг Опубликовано 5 ноября, 2009 Жалоба Поделиться Опубликовано 5 ноября, 2009 Есть некая функция, написаная мною POS(аргумент), она делает транслит, т.е. например аргумент= Машина, то она преобразует ее => Mashina. НО! Всё это хорошо когда аргумент, тобиш переменная, задается в самом коде: char st[300]="Машина"; // POS(st) переведет ее в Mashina А нужно, чтобы само слово вводил чел, sсanf() ом или gets() ом или еще как.. Здесь и начинается проблема...грубо говоря "внешняя кодировка" отличается от той, где хранится код. Помогите пожалуйста решить сие проблема)setlocale() ? За одно и вопрос: в какой кодировке в С все "выполняется", а в какой "задается" челом? :) Можете опубликовать код функции ? Любопытство :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
PriN_ce Опубликовано 10 ноября, 2009 Автор Жалоба Поделиться Опубликовано 10 ноября, 2009 Можете опубликовать код функции ? Любопытство :) Конечно...ток сиьлно не бейте)) :) #include <stdio.h>#include <windows.h>void POS(char* str){char sloj_rus[16]="жцчшщьюяЖЦЧШЩЬЮЯ";char *sloj_eng[16] = {"zh","ts","ch","sh","shch","'","yu","ya","ZH","TS","CH","SH","SHCH","'","YU","YA"};char st_1[72]=" !@#$%^&*()_+-|=':;?<>абвгдеёзийклмнопрстуфхъыэАБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ";char st_2[72]=" !@#$%^&*()_+-|=':;?<>abvgdeeziyklmnoprstufh'ieABVGDEEZIYKLMNOPRSTUFH'IEI";int l,j,i,pam=strlen(str);for (i=0;i<pam;i++){ for(j=0;j<72;j++){ if (str[i]==st_1[j]) { printf("%c",st_2[j]); }; }; for(l=0;l<16;l++){ if (str[i]==sloj_rus[l]) { printf("%s",sloj_eng[l]); }; }; }}int main() {char st[300],st_p[300]; gets(st);OemToCharA(st,st_p);POS(st_p);getchar();return 0;} Конечно...ща польется критика)) :) #include <stdio.h>#include <windows.h>void POS(char* str){char sloj_rus[16]="жцчшщьюяЖЦЧШЩЬЮЯ";char *sloj_eng[16] = {"zh","ts","ch","sh","shch","'","yu","ya","ZH","TS","CH","SH","SHCH","'","YU","YA"};char st_1[72]=" !@#$%^&*()_+-|=':;?<>абвгдеёзийклмнопрстуфхъыэАБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ";char st_2[72]=" !@#$%^&*()_+-|=':;?<>abvgdeeziyklmnoprstufh'ieABVGDEEZIYKLMNOPRSTUFH'IEI";int l,j,i,pam=strlen(str);for (i=0;i<pam;i++){ for(j=0;j<72;j++){ if (str[i]==st_1[j]) { printf("%c",st_2[j]); }; }; for(l=0;l<16;l++){ if (str[i]==sloj_rus[l]) { printf("%s",sloj_eng[l]); }; }; }}int main() {char st[300],st_p[300]; gets(st);OemToCharA(st,st_p);POS(st_p);getchar();return 0;} ааааа Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
PriN_ce Опубликовано 10 ноября, 2009 Автор Жалоба Поделиться Опубликовано 10 ноября, 2009 черт...нельзя удалть сообщения(((хд второй код тотж самый) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.