Jump to content
СофтФорум - всё о компьютерах и не только

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


Recommended Posts

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

НО!

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

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

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

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

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

:)

Link to comment
Share on other sites

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

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

BOOL OemToCharA( (LPCSTR)ЕОМ-строка из консоли, выходной масив аргумента );
Link to comment
Share on other sites

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

НО!

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

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

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

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

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

:)

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

Link to comment
Share on other sites

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

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

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

ааааа

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...