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

[C++] funkcja tolower - obsługa polskich znaków

Ostatnio zmodyfikowano 2013-12-26 17:02
Autor Wiadomość
Kefirek
Temat założony przez niniejszego użytkownika
[C++] funkcja tolower - obsługa polskich znaków
» 2013-12-25 21:12:55
Witam

W moim programie funkcja tolower nie zmienia dużych polskich liter ze znakami diaktrycznymi(ŁĘĆŹŻÓĘŚ) na odpowiednie małe po czym program wywala błąd.
Czy jest sposób aby funkcja tolower zamieniała je  na małe????
P-100121
Monika90
» 2013-12-25 23:26:19
C/C++
std::locale loc( "nazwa locale dla danego języka i kodowania" );
char ch = 'Ł';
ch = std::tolower( ch, loc );

Nazwy locale nie są standaryzowane w C++, więc musisz sprawdzić w dokumentacji jakie nazwy są dostępne w używanym przez ciebie systemie.
P-100124
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-26 10:58:03
Witam

Jeżeli dane np: ŁĘŚĄŻŹÓ są przypisane do tab[] = "ŁĘŚĄŻŹÓ"; program działa natomiast po wprowadzeni danych do tab[] cin'em program wyświetla "Krzaczory"
zamiast zmniejszonych liter z ogonkami.
Poniżej kod:
C/C++
#include <iostream>       // std::cout
#include <string>         // std::string
#include <locale>         // std::locale, std::tolower

int main()
{
    std::locale loc( "polish" );
    setlocale( LC_ALL, "polish" ); // - bez tego wersu nie działa jak trzeba - wyświetlają się "krzaczki"
    char tab[ 10 ];
   
   
    for( std::string::size_type i = 0; i < strlen( tab ); ++i )
    {
        std::cin >> tab[ i ];
        std::cout << std::tolower( tab[ i ], loc );
    }
   
    system( "pause" );
    return 0;
}

Pozdrawiam
Kefirek
P-100141
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-26 11:03:06
Problem rozwiązany - zabrakło: system("chcp 1250");
Pozdrawiam
i dzięki za podpowiedż Monika90
Kefirek :-)
P-100142
Monika90
» 2013-12-26 11:07:59
strlen( tab )
Niezdefiniowane zachowanie.

setlocale( LC_ALL, "polish" );
Nie jest potrzebne.

system("chcp 1250")
Też nie jest potrzebne

Jak chcesz przetwarzać tekst wpisany w konsoli, a kompilator to MSVC,  to użyj
C/C++
std::locale loc( ".OCP" );
ch = std::tolower( ch, loc );
P-100143
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-26 11:25:26
strlen(tab) - a co  możnaby było użyć zamiast?
Pozdrawiam
Kefirek
P-100144
pekfos
» 2013-12-26 14:06:35
strlen(tab) - a co  możnaby było użyć zamiast?
Można w tym przypadku użyć sizeof. Ale po co w ogóle używać tu tablicy?
P-100160
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-26 14:40:52
sizeof(tab) = długości pamięci zarezerwowanej  dla tab..... i tu byłby problem po wprowadzeniu mniejszej ilości znaków do tab niż jest zarezerwowanej na ten cel pamięci. W pętli z takim warunkiem wyjechałbyś poza zakres łańcucha (poza '/0')i byłby błąd.

 
P-100163
« 1 » 2
  Strona 1 z 2 Następna strona