Funkcja isalpha i polskie znaki

Funkcja isalpha i polskie znaki
FA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 3 lata
0

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

Kopiuj
 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 ?

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
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).

Zobacz pozostałe 5 komentarzy
06
Tak czy siak, kodowanie musisz ustawić na takie, jakie podajesz funkcji isalpha.
FA
A jak sprawdzić jakie kodowanie mam w pliku ?
06
Otwórz w jakimś edytorze, który pokazuje na belce kodowanie pliku. Ewentualnie podejrzyj kod jakiegoś znaku diakrytyzowanego i porównaj z tabelami kodowań dla CP852, CP1250 i 8859-2.
FA
ustawilem na setlocale(LC_CTYPE, "UTF-8"); i w miejscu gdzie powinna być litera "ą" wyswietla "/304"
06
Jeśli plik masz w kodowaniu utf-8, to z tą funkcją nie zadziała. Przekonwertuj plik do kodowania 852 lub 1250.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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

FA
głupi błąd ;) już poprawione

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.