Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Помогите с кодировкой в Си


Рекомендуемые сообщения

Есть некая функция, написаная мною POS(аргумент), она делает транслит, т.е. например аргумент= Машина, то она преобразует ее => Mashina.

НО!

Всё это хорошо когда аргумент, тобиш переменная, задается в самом коде:

char st[300]="Машина"; // POS(st) переведет ее в Mashina

А нужно, чтобы само слово вводил чел, sсanf() ом или gets() ом или еще как..

Здесь и начинается проблема...грубо говоря "внешняя кодировка" отличается от той, где хранится код. Помогите пожалуйста решить сие проблема)setlocale() ?

За одно и вопрос: в какой кодировке в С все "выполняется", а в какой "задается" челом?

:)

Ссылка на комментарий
Поделиться на другие сайты

Консоль использует ЕОМ-кодировку.

Просто перед вызовом своей функции конвертируйте параметр функцией:

BOOL OemToCharA( (LPCSTR)ЕОМ-строка из консоли, выходной масив аргумента );
Ссылка на комментарий
Поделиться на другие сайты

Есть некая функция, написаная мною POS(аргумент), она делает транслит, т.е. например аргумент= Машина, то она преобразует ее => Mashina.

НО!

Всё это хорошо когда аргумент, тобиш переменная, задается в самом коде:

char st[300]="Машина"; // POS(st) переведет ее в Mashina

А нужно, чтобы само слово вводил чел, sсanf() ом или gets() ом или еще как..

Здесь и начинается проблема...грубо говоря "внешняя кодировка" отличается от той, где хранится код. Помогите пожалуйста решить сие проблема)setlocale() ?

За одно и вопрос: в какой кодировке в С все "выполняется", а в какой "задается" челом?

:)

Можете опубликовать код функции ? Любопытство :)

Ссылка на комментарий
Поделиться на другие сайты

Можете опубликовать код функции ? Любопытство :)

Конечно...ток сиьлно не бейте)) :)

#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;}

ааааа

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...