Polskie znaki

PT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

Mam takie zapisy w CodeBlocksie, kodowanie UTF8,WIN7:

Kopiuj
char slowo[]="żar";

i

Kopiuj
char slowo[10];
    for(int i=0; i<11; i++)
    {
       //slowo[i]='\0';
    }      
    slowo[0]='ż';
    slowo[1]='a';
    slowo[2]='r';

Przy porównywaniu strcmp otrzymuje że te napisy są różne.
Dodam tylko że gdy w podobny sposób wprowadze np. słowo krowa to działa poprawnie. Więc domyślam się że to coś z kodowaniem. Ktoś może wytłumaczyć mi w czym tkwi róznica?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

W tym że char przechowuje 255 wartości i ani jednej więcej. W efekcie nie za bardzo może przechować ci te twoje krzaki. Lekcja na dziś: wchar_t

Lucas Darkstorm
  • Rejestracja: dni
  • Ostatnio: dni
0

strcmp() używa się do stringów, które zawierają jedynie znaki z zestawu ASCII. Jeśli interesuje Cię porównywanie ciągów z polskimi znakami, to wypróbuj funkcję wcscmp().

Kopiuj
#include <iostream>
#include <cwchar>

using namespace std ;

int main()
{
  const wchar_t *slowo = L"żar" ;
  const wchar_t *slowo2 = L"żar" ;

  if (wcscmp(slowo, slowo2) == 0)
  {
    cout << "Stringi sa takie same" << endl ;
  }
  else cout << "Stringi nie sa takie same" << endl ;
}
PT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

czy w C standard 1998 wchar_t też jest?

MA
  • Rejestracja: dni
  • Ostatnio: dni
0
ptomasz napisał(a):

czy w C standard 1998 wchar_t też jest?

Przypuszczam że wchar_t może być starszy od ciebie ;)

Tak czy inaczej chcąc uczynić swój kod przenośnym nie należy go już stosować.

Polecam artykuł na wikipedii. http://en.wikipedia.org/wiki/Wide_character

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Litera ż w UTF-8 nie zajmuje jednego chara, tylko dwa.
UTF-8 to kodowanie o zmiennej „szerokości” znaku.

http://pl.wikipedia.org/wiki/UTF-8

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.