Čeština v C++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Čeština v C++ – C / C++ – Fórum – Programujte.comČeština v C++ – C / C++ – Fórum – Programujte.com

 

vdolek0
Newbie
10. 10. 2009   #1
-
0
-

Ahoj,
potřeboval bych radu týkající se kódování v C++. Nějaký způsob jak v konzolových aplikacích pracovat s textem s českými znaky. Nevím jestli mám používat string / wstring, ifstream / wifstream, cout / wcout atd nebo nastavovat setlocale, mám v tom strašný zmatek.

Když dělám s českými znaky, tak v/v souboru mi funguje (soubor musí být ANSI), a při výstupu do konzoly musím volat CharToOemA (v souboru windows.h). Nefungují mi ale funkce jako toupper nebo isaplha atd. A taky jak pracovat třeba s UTF-8 souborem? A také jestli existuje přenositelné řešení (není nutné, spokojím se i s řešením pro Win, bylo by to ale "čistější").

Hlavně potřebuji načíst textový soubor a používat funkce jako tolower a isaplha atd., tak aby pracovaly i s čes. znaky).

Dělám na Visual Studiu 2008.

Předem díky

Nahlásit jako SPAM
IP: 213.220.248.–
KIIV
~ Moderátor
+43
God of flame
10. 10. 2009   #2
-
0
-

v linuxu to jde snadno...
ve win musis pouzit tusim SetConsoleCP a asi i SetConsoleOutputCP + nastavit u prikazovky truetype font.. s defaultnim to jde jen s tusim cp 952

ty dalsi funkce sou pak taky trochu zavisle na locale.. ale nejak sem to nikdy nepotreboval mozna pouzit ty wide character verze

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub+1
Stálý člen
10. 10. 2009   #3
-
0
-

Ve visual studiu by mělo fungovat

#include <iostream>

#include <clocale>
#include <locale>

int main()
{
std::setlocale(LC_ALL, "");

std::wcout.imbue(std::locale(""));
std::wcout << L"ěščřžýáíé\n";
}

Nahlásit jako SPAM
IP: 89.203.160.–
vdolek0
Newbie
11. 10. 2009   #4
-
0
-

Díky moc, už mi funguje vše jak sem potřeboval.

#include <iostream>

#include <locale>

int main()
{
std::locale cz("Czech");
std::locale::global(cz);

//std::cout.imbue(cz);
//std::cin.imbue(cz); // tyto prikazy jen umozni psat des. carku misto tecky

std::cout << "ěščřžýáíéůúňďť";
std::wcout << L"ěščřžýáíéůúňďť";
}

V pohodě funguje i čtení a zápis do souboru, jen pokud chci načíst text z konzole, tak to načítá nesmyslné znaky. Podařilo se mi to opravit pomocí SetConsoleCP(1250) a SetConsoleOutputCP(1250) (ze souboru windows.h) - funguje i pak čtení z konzole, ale musí se nastavovat písmo v konzoli, není nějaký lepší způsob (a přenositelný)?

A pak ještě jedna věc: Jak porovnám řetězce, tak aby 'c' < 'č' < 'd' atd.?

Nahlásit jako SPAM
IP: 213.220.248.–
KIIV
~ Moderátor
+43
God of flame
11. 10. 2009   #5
-
0
-

To vdolek : prenositelnost jedine pomoci #ifdef.. jako kdyz je to __WIN32 nebo tak nejak ... pripadne linux..
porovnavani musis udelat jedine sam.. nebo sehnat nejake knihovny..

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
m->29+6
Super člen
11. 10. 2009   #6
-
0
-

Ak máš nadstavenú lokalizáciu tak v C funguje na porovnávanie reťazcov funkcia int strcoll(const char *s1, const char *s2);
V C++ bude určite podobná funkcia ;-)

Nahlásit jako SPAM
IP: 147.229.208.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 101 hostů

Podobná vlákna

Cestina — založil matouch

čestina? — založil Michal

S.w.i.n.e - čeština — založil ondy13

Čeština v C++ — založil Pavel Szabo

MSSQL a cestina — založil Petr sejn

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý