• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operacje na polskich znakach C++

Object Storage Arubacloud
+1 głos
478 wizyt
pytanie zadane 7 lutego 2022 w C i C++ przez kubsde Nowicjusz (130 p.)

Witam, wiem że temat był poruszany mnóstwo razy, ale żaden z przejrzanych przeze mnie wątków nie rozwiązał mojego problemu. Piszę program wyszukujący słowa, które da się ułożyć z podanych liter. Taka wyszukiwarka do gry w scrabble.

Program porównuje znaki wejścia (lista słów) do podanych liter na zwykłym stringu, np.:

if(słowo[1] == tekst[5]) takieSame=true;

W przypadku gdy słowo[1] oraz tekst[5] to takie same znaki, które są literami diakrytycznymi, to program je ignoruje i warunek if-a nie będzie spełniony.

Klasyczne 

setlocale(LC_ALL, "pl_PL");

nie pomaga. Na forum znalazłem coś takiego, jest tam mowa (w ostatniej odpowiedzi) o zmianie modulo z 127 na 255, jednak nie do końca rozumiem co to znaczy, a być może jest to rozwiązanie potrzebne dla mnie. Jeśli tak, to proszę o wytłumaczenie, a jeśli nie to czy istnieje jakiś inny sposób aby to obejść?

komentarz 7 lutego 2022 przez Oscar Nałogowiec (29,320 p.)
To jest trudny temat. Język C to bardzo stare narzędzie. zasadniczo operuje on jedynie znakami o rozmiarze bajtu. Tam polskie znaki tak ogólnie się nie mieszczą. Dawno temu powstało kilka modyfikacji by tam upchać polskie znaki, ale są one różne. O ile ciągle takie znaki mieszczą się w bajcie to zasadniczo program nie zależy od konkretnej wersji (strony kodowej), musisz jedynie zapewnić by wszystkie dane (słówka, literki, terminal, program źródłowy) pracowały spójnie - tzn w tym samym kodowaniu. Uniwersalnym rozwiązaniem jest przeście na unicode, ale wtedy też nie jest prosto - trzeba używać wchar, wstring itp. Dane zewnętrzne też muszą być w unicode. Być może najnowsze wersje C++ coś tutaj rozwiązały. Stąd twoje problemy.

1 odpowiedź

0 głosów
odpowiedź 7 lutego 2022 przez overcq Pasjonat (21,710 p.)
setlocale(LC_ALL, "pl_PL");

może ustawiać polski język z kodowaniem UTF-8.

U mnie na Gentoo Linux jest plik /etc/locale.gen o następującej zawartości:

en_US ISO-8859-1
en_US.UTF-8 UTF-8
pl_PL ISO-8859-2
pl_PL.UTF-8 UTF-8

Dla "pl_PL" ustawia kodowanie ISO-8859-2, które jest bajtowe, więc podany przez Ciebie przykład porównania powinien dla niego działać. (U Ciebie może być oczywiście inna zawartośc pliku /etc/locale.gen.)

Na Windowsie mógłbyś ustawić tak, jak podane tutaj. Strona kodowa 1250 dla języka polskiego. No i jeśli masz w pliku źródłowym C zapisane znaki, to ten plik powinien być zapisany w tej stronie kodowej.

komentarz 8 lutego 2022 przez j23 Mędrzec (194,920 p.)
Kodowanie 1250 to kodowanie ANSI, ale jeśli słowa do porównania pobiera z konsoli, to tam będzie miał kodowanie OEM - czyli dla pl to cp852.

Podobne pytania

0 głosów
1 odpowiedź 4,210 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez chacken Użytkownik (820 p.)
+1 głos
2 odpowiedzi 380 wizyt
0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 2 lutego 2017 w C i C++ przez Piotr Lis Obywatel (1,310 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...