w standardzie ASCII każdy znak jest kodowany na
Transkrypt
w standardzie ASCII każdy znak jest kodowany na
Znaki w pamięci komputera przechowywane są w postaci liczb całkowitych: • • • w standardzie ASCII każdy znak jest kodowany na 1 bajcie, jako liczba z zakresu <0,255> w standardzie Unicode każdy znak jest kodowany na 2 bajtach, jako liczba z zakresu <0,65537> w standardzie UTF-8 jest różnie: znaki alfabetu angielskiego i cyfry są na 1 bajcie, inne znaki narodowe na 2 lub nawet więcej bajtach ASCII - American Standard Code for Information Interchange – jest to standard zapisu znaków w 7-bitowym kodzie. Liczbom z zakresu 0-127 przyporządkowano jednoznacznie: litery alfabetu angielskiego, cyfry, znaki przestankowe i inne symbole oraz polecenia sterujące, np.: 65 - A, 32 – spacja, 8 - backspace. Ósmy bit jest różnie wykorzystywany w różnych stronach kodowych. Kodom od 128 do 255 odpowiadają znaki semigraficzne: cieniowanie , ramki ╩ ▀▄┌ ┐└ ┘ oraz znaki specjalne języka, np. ąęść. Znaki w programowaniu Do przechowywania znaków w kodzie programu C i C++ służą dwa typy zmiennych: char – pojedynczy znak, każda zmienna zajmuje 1 bajt. Stałe znakowe ujmuje się w apostrofy: ‘a’ string – łańcuch znaków, czyli tekst (np. słowo, zdanie). Sałe tekstowe piszemy w cudzysłowach: ”aa” Kod znaku: (int)znak – rzutuje znak na typ liczby całkowitej, zwraca kod znaku Postać graficzna znaku o podanym kodzie: (char)kod – rzutuje liczbę na typ znakowy char, zwraca graficzną postać znaku o danym kodzie Przykłady: char znak=’@’; // deklaruje zmienną typu char i przypisuje jej wartość cout << (int) znak; // wyświetla kod ASCII tego znaku Program który wyświetla wszystkie znaki o kodach z zakresu od 0 do 255 for (int i=0; i<=255; i++) cout << i << ’\t’ << (char)i << endl; Program który prosi o podanie znaku z klawiatury, pobiera go i wyświetla jego kod ASCII. Powtarza to aż użytkownik poda znak ENTER (o kodzie równym 13) char z; while (z!=13) { cout << "daj znak "; z = getch(); cout << "znak " << z << " ma kod " << (int)z << endl; } Zwróć uwagę, typ char przechowuje 256 liczb, ale nie z zakresu <0,255>, lecz <-128, 127>. Jeśli podasz znak z „polskim ogonkiem”: ą, ę, ń, ś itp., to program wyświetli kod jako liczbę ujemną. Gdy dodasz do tego kodu liczbę 256, dopiero otrzymasz właściwy kod znaku. Można od razu używać zakresu <0,255> deklarując typ unsigned char zamiast char. Przykład łańcucha znaków: string s = ”Basia”; Zmienne typu string nie są zwykłymi zmiennymi prostymi, jak char, int, double, bool. Są obiektami o złożonej strukturze i wielu wbudowanych funkcjach. Na przykład funkcja length() zwraca liczbę znaków w stringu. Przykład cout << s.length(); // dla s=”Basia” zwróci liczbę 5 Znaki w stringu są indeksowane, począwszy od 0 (pierwszy znak ma indeks 0). Można odwołać się do każdego, pojedynczego znaku w łańcuchu, podając indeks znaku w nawiasie kwadratowym. Przykład cout << s[2]; // zwróci trzeci znak tekstu s, dla s=”Basia” zwróci literę ‘s’ Program który pobiera z klawiatury słowo i wyświetla kody ASCII wszystkich kolejnych znaków w tym słowie, oddzielając je spacją: string s; cout << "daj slowo "; getline(cin,s); int n = s.length(); cout << n << " znakow w slowie\n" for (int i=0; i<n; i++) { int kod = s[i]; if (kod<0) kod += 256; cout << kod << " "; } cout << endl; ; Program który zlicza ile razy w tekście wystapiła litera ‘a’ string s = "Programowanie zawsze zajmie wiecej czasu niz sie spodziewasz"; int licznik=0; for (int i=0; i<n; i++) if (s[i]=='a') licznik ++; cout<<"znakow a jest "<<licza<<endl; Zadanie Napisz program który pobiera tekst z klawiatury i wyświetla go wspak, tzn. tekst czytany od ostatniego znaku do pierwszego.