System ASCII
ASCII to standard kodowania znaków, który przypisuje numery literom, cyfrom i symbolom. Innymi słowy, jest to system zapisu znaków poprzez liczby (7-bitowe - od 0 do 127) wykorzystywany między innymi przez C++. Oznacza to, że każda litera alfabetu łacińskiego/cyfra/biały znak (i wiele więcej) posiada swój własny numer w systemie ASCII.
Poniższy fragment kodu wczyta dowolny znak i wypisze jego numer w systemie ASCII.
char znak;
cin >> znak;
int numer = znak; // znak w zmiennej typu int przyjmuje wartość ASCII
cout << numer;
Oczywiście można to zrobić bez użycia zmiennej typu int:
char znak;
cin >> znak;
cout << int(znak);
Przykładowo, dla wejścia a program wypisze 97, natomiast dla wejścia 4, program wypisze 52.
Działa to też w drugą stronę - poniższy fragment kodu wczytuje numer w systemie ASCII i wypisuje odpowiadający mu znak:
int numer;
cin >> numer;
cout << char(numer);
Dla wejścia 52 program wypisze 4, natomiast dla wejścia 97 program wypisze a.
Operacje matematyczne na znakach
W C++ możemy wykonywać operacje matematyczne na znakach, a dokładniej ich wartościach w ASCII. Przykładowy program wczytujący dwa znaki i wypisujący sumę ich wartości w systemie ASCII:
#include <iostream>
using namespace std;
int main()
{
char znak1, znak2;
cin >> znak1 >> znak2;
cout << znak1 + znak2;
return 0;
}
W trzeciej linii kodu program ‘‘domyśla się’’, że skoro używamy operatora ‘+’, chodzi nam o wartość liczbową. Dla wejścia a b program wypisze 195 (97+98=195). Możemy używać też operatorów: ‘-’, ‘*’ , ‘/’, ‘%’;
Konwertowanie cyfr ze zmiennych typu char na zmienne typu int
Operacje matematyczne na znakach możemy wykorzystać do przekształcania cyfry zapisanej jako znak w cyfrę zapisaną jako liczba. Użyjemy operatora ‘-’ - poniższy program wczytuje cyfrę jako znak i przekształca ją w zmienną typu int:
#include <iostream>
using namespace std;
int main()
{
char cyfra_znak;
int cyfra_liczba;
cin >> cyfra_znak;
cyfra_liczba = cyfra_znak - '0';
cout << cyfra_liczba;
return 0;
}
Kluczową linią w działaniu tego programu jest linia 8: cyfra_liczba = cyfra_znak - '0';
- w tej linii zmienna cyfra_liczba przyjmuje pożądaną wartość. Przykładowo, dla wejścia 7, zmienna cyfra liczba przyjmuje wartośc: '7' - '0' = 55 - 48 = 7
. (55 i 48 to wartości 7 i 0 w systemie ascii)
Przydatna informacja: w ASCII występuje rozróżnienie między wielką i małą literą.