Portál AbcLinuxu, 10. května 2025 00:19

Dotaz: Nacitanie a porovnanie znakov s diakritikou v C...

27.11.2005 00:25 vladon | skóre: 2
Nacitanie a porovnanie znakov s diakritikou v C...
Přečteno: 221×
Odpovědět | Admin
Ahojte.
Cez fgets(str, 256, fr) som nacital riadok zo suboru
a potrebujem v nom zistit pocet znakov z diakritikou.
Ak dam napr. v cykle ze if (str[i] == 'á') (dlhemu a), kompilator
vypise: multi-character character constant.
Ako sa to da riesit?
Vdaka Vladon
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.11.2005 00:33 #Tom
Rozbalit Rozbalit vše Re: Nacitanie a porovnanie znakov s diakritikou v C...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Celkem blbě, zřejmě je zdrojový text v UTF-8. Navíc nedoporučuju takto znaky s diakritikou vůbec porovnávat.
27.11.2005 00:39 vladon | skóre: 2
Rozbalit Rozbalit vše Re: Nacitanie a porovnanie znakov s diakritikou v C...
Ano, je to UTF. Ako sa to teda da? v.
27.11.2005 01:00 WerK | skóre: 19 | blog: desktop
Rozbalit Rozbalit vše Re: Nacitanie a porovnanie znakov s diakritikou v C...
Doporucuji funkci strcmp() v knihovne string
27.11.2005 01:15 #Tom
Rozbalit Rozbalit vše Re: Nacitanie a porovnanie znakov s diakritikou v C...
Pokud je načítaný řetězec osmibitový, tak by se dalo zhruba říci, že 32-126 jsou znaky obyčejné a dají se napsat na klávesnici s nezměněným rozložením. Od 128 do 255 jsou pak znaky s diakritikou, ale také třeba rámečky.

Pokud je načítaný řetězec šestnáctibitový, platí v podstatě totéž, jen to jde až do 65535. Řetězec by měl být typu short int *, unsigned short int * či wchar_t *.

Pokud je načítaný řetězec v UTF-8, tak vyvstává zásadní problém. Pokud je ve znaku obsažen nejvyšší bit ((znak & 0x80) == 0x80), může v něm být diakritika. Je však potřeba přeskočit vhodný počet dalších znaků. Více v man utf-8.
27.11.2005 10:26 megi | skóre: 11 | blog:
Rozbalit Rozbalit vše Re: Nacitanie a porovnanie znakov s diakritikou v C...
Dá se použít oblíbená knihovna glib-2.0 a konkrétně funkce:

http://developer.gnome.org/doc/API/2.0/glib/glib-Unicode-Manipulation.html#g-utf8-next-char

g_utf8_get_next_char () pro iteraci po řetězci g_utf8_get_char () pro získání hodnoty znaku

vytvoříš si tabulku všech znaků s diakritikou (třeba v kódování ucs-2) a budeš to porovnávat s výstupem z g_utf8_get_char
27.11.2005 17:54 vladon | skóre: 2
Rozbalit Rozbalit vše Re: Nacitanie a porovnanie znakov s diakritikou v C...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hmm, ok, vdaka za rady, vsetko vyskusam a hned sa ozvem ;-)
v.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.