Podpora češtiny v jazyce C

Jetset

Re:Podpora češtiny v jazyce C
« Odpověď #15 kdy: 23. 10. 2014, 15:43:17 »
Musis si dat pozor, abys mel zdrojak i system v kodovani UTF8. Pak budou fungovat veci jako printf("áááááá");
putchar ti fungovat NIKDY nebude, protoze putchar vypise JEDEN BYTE, ne jeden znak. Znak je v tomto pripade sekvence az sesti bytes. Mel by fungovat putwchar, jak tady uz nekdo zminil, ale osobne jsem ho nikdy nepouzil, tak nevim. Davej si pozor pri read/write do file, pokud ocekavas, ze by ve file melo byt jine kodovani, musis prekodovavat.
Co se tyce zjistovani delky retezce, staci si na to napisat funkci, ktera bude pocitat vsechny znaky ktere jsou mensi nez 0x80 NEBO vetsi nez 0xbf (hodnoty 0x80 az 0xbf se pouzivaji v pripade vicebytovych sekvenci jako druhy a dalsi znak).
Pro vyhledani znaku v retezci muzes pouzit funkci strstr a vyhledavat string - opakuji, ze ne-ascii znaky nejsou jeden byte, ale de-facto string, takze strstr("máma má maso", "á") ti to najde.


MilanC

Re:Podpora češtiny v jazyce C
« Odpověď #16 kdy: 25. 10. 2014, 13:08:22 »
Tak už to mám,
nejdřív, díky za rady, ale řešení je zdá se jednoduší.
Připomenu jen o co mi šlo, jakožto pořád ještě začátečníkovi: ne o toto
   printf("á");   , což funguje zřejmě v každém dobře nastaveném národním prostředí, ale o tohle
   c = 'á';
   printf("%c", c);   , o všemožnou práci s jakýmkoli znakem, což, souhlasím, nejde.
A jak to tedy jde?

S širokými znaky mi funguje následující:
   <wchar.h>
   wchar_t wc;
   wc = "žšč";
   printf("%s", wc);
Tento způsob ale nedokáže číst z nějakého důvodu z obrazovky nebo ze souboru.

Nebo
   char s[] = "žšč";
   printf("%s", s);

A o to mi především pro začátek šlo. I když teď mě čeká, ano, umět hledání řetězce v řetězci atd.
   Koukám taky, že to nenačítá mezery a nic po nich. Holt to je další schůdek přede mnou v mém procesu učení se C.
Mějte se ... programátorsky.

dword

Re:Podpora češtiny v jazyce C
« Odpověď #17 kdy: 25. 10. 2014, 14:01:05 »
#include <wchar.h>

wchar_t *str1 = "žšč";
wchar_t str2[] = "žšč";
wchar_t char1 = 'ž';

wprintf("%s", str1);
wprintf("%s", str2);
putwchar(char1);
wprintf("%c", char1);