wazxse5 Temat założony przez niniejszego użytkownika |
Usuwanie polskich liter » 2014-11-26 18:38:25 Potrzebuję programu który ze striga usuwa polskie znaki czyli np z "ą" robi "a" Próbowałem robić to w ten sposób ale bez efektów: string tekst; getline( cin, tekst ); for( int i = 0; i < tekst.length(); i++ ) { switch( tekst[ i ] ) { case 'ą': tekst[ i ] = 'a'; break; case 'ć': tekst[ i ] = 'c'; break; case 'ę': tekst[ i ] = 'e'; break; } }
Proszę o pomoc :) |
|
oputyk |
» 2014-11-26 19:25:13 O ile wiem, to std::string nie przyjmuje polskich liter. Więc na początku wypadałoby zamienić go na std::wstring . |
|
1aam2am1 |
» 2014-11-26 20:28:06 std::string ma polskie znaki ale jako kod ASCII a nie UTF-8 co może powodować błędy w wyświetlaniu gdy kompilujemy program. |
|
Monika90 |
» 2014-11-26 22:49:26 std::string może przechowywać polskie znaki, tylko pytanie jakiego kodowania używa. Są 3 popularne do wyboru (albo 4 jeżeli uwzględnić UTF-8), są to: iso-8859-2, cp852 i cp1250. Np. w Windows jeżeli wczytujesz tekst z konsoli to prawie na pewno kodowanie to cp852, za to tekst wpisany w edytorze tekstu, którego używasz do pisania programów, to często cp1250. Więc nic dziwnego że nie pasuje.
Można temu zaradzić na wiele sposobów: 1. Ustawić w edytorze kodowanie cp-852.
albo 2. Znaleźć na wikipedii tabelę kodów cp-852 i w tekście proogramu wpisać odpowiednie kody zamiast literek.
albo 3. poprosić kompilator żeby przetłumaczył w czasie kompilacji tekst programu z cp1250 na cp852. W GCC -fexec-charset=cp852 -finput-charset=cp1250
|
|
greatday |
» 2014-11-26 23:08:00 Akurat ja używam do tego boost #include <boost/algorithm/string/replace.hpp> boost::replace_all(tekst, "Ż", "Z"); boost::replace_all(tekst, "Ó", "O"); boost::replace_all(tekst, "Ł", "L"); boost::replace_all(tekst, "Ń", "N"); boost::replace_all(tekst, "Ę", "E"); boost::replace_all(tekst, "Ą", "A"); boost::replace_all(tekst, "Ś", "S"); boost::replace_all(tekst, "Ć", "C"); boost::replace_all(tekst, "Ź", "Z"); boost::replace_all(tekst, "ż", "z"); boost::replace_all(tekst, "ó", "o"); boost::replace_all(tekst, "ł", "l"); boost::replace_all(tekst, "ń", "n"); boost::replace_all(tekst, "ę", "e"); boost::replace_all(tekst, "ą", "a"); boost::replace_all(tekst, "ś", "s"); boost::replace_all(tekst, "ć", "c"); boost::replace_all(tekst, "ź", "z"); Może to brzydki sposób ale skuteczny i nie miałem z nim żadnych powikłań na masowej ilości wywoływanej funkcji (kilka tys na sekundę). |
|
wazxse5 Temat założony przez niniejszego użytkownika |
» 2014-11-27 14:34:11 Zobaczyłem teraz coś ciekawego,mianowicie gdy ustawiam strigna w kodzie to program działa jak wczytuję tekst w konsoli to program nie działa Why? |
|
darko202 |
» 2014-11-27 15:05:19 sprawdź kody asci wczytanych znaków i znaków które wprowadziłeś w programie char a = 'Ą'; printf( "%d",( int ) a ); cin >> a printf( "%d",( int ) a );
|
|
Tomek_z_W11 |
» 2014-11-27 15:27:02 wazxse5 już otrzymałeś odpowiedź, problem leży w stronie kodowej systemu operacyjnego, przeczytaj jeszcze raz co pisali Ci wcześniej. |
|
« 1 » 2 |