Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Usuwanie polskich liter

Ostatnio zmodyfikowano 2014-11-28 15:35
Autor Wiadomość
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:
C/C++
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;
        // i tak dalej
    }
}

Proszę o pomoc :)
P-121457
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
.
P-121464
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.
P-121478
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

P-121512
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ę).
P-121514
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
C/C++
string text = "ąęć";

jak wczytuję tekst w konsoli to program nie działa

Why?
P-121541
darko202
» 2014-11-27 15:05:19
sprawdź kody asci wczytanych znaków
i znaków które wprowadziłeś w programie
C/C++
char a = 'Ą';
printf( "%d",( int ) a );
cin >> a
printf( "%d",( int ) a );
P-121543
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.
P-121548
« 1 » 2
  Strona 1 z 2 Następna strona