Funkcja isalpha i polskie znaki

0

Mam taki problem. Oto funkcja, która po przekazaniu do niej znaku ma go wypisać:

 void wypisz(char a){
    if(a==' ' && isalpha(a)==0){ /*jesli napotka znak spacji wypisz koniec linii*/
        printf("\n");
    }
    if(isalpha(a)==1){ /*jesli napotka znak wypisz go*/
        printf("%c", a);
    }
}

Problem pojawia się kiedy do funkcji trafia polski znak np. "ą". Czy ktoś wie jak to zmodyfikować, aby działało z polskimi znakami ?

1

Dwie sprawy:

  1. najważniejsza: musisz ustawić locale na kodowanie, w którym podajesz znaki np.: setlocale(LC_CTYPE, ".1250");

  2. czasami konieczne jest rzutowanie znaku na unsigned char przy wywołaniu isalpha, czyli: isalpha((unsigned char)a). Jeśli dobrze pamiętam, implementacja visualowa powodowała błąd asercji przy kodach powyżej 127 (bo przecież znak nie może mieć kodu mniejszego od zera).

1

Nie porównuj wyniku isalpha z 1. Ta funkcja zwraca tylko dwie różne wartości:

  • 0 (zero), jeśli znak nie jest literą
  • nie-zero, jeśli znak jest literą (ale nie wiadomo jakie nie-zero)

http://www.cplusplus.com/reference/cctype/isalpha/
http://en.cppreference.com/w/cpp/string/byte/isalpha

1 użytkowników online, w tym zalogowanych: 0, gości: 1