Карактерски тип података
У језику C++ постоји и подршка за представљање појединачног ASCII
карактера коришћењем типа char који заузима 1 бајт.
Појединачни карактер можемо учитати позивом
cin >> c или позивом cin.get(c) и у оба
случаја враћа се истинитосна вредност која указује да ли је карактер
успешно учитан (враћа се вредност false уколико није било
могуће учитати карактер, тј. ако се дошло до краја улаза). Уколико је
позив успешно завршен, у променљиву c се смешта вредност
која одговара ASCII кôду учитаног карактера. Појединачни карактер
c типа char можемо на екран исписати позивом
cout << c, а ASCII вредност овог карактера тако што
најпре извршимо његову конверзију у тип int а затим ту
вредност испишемо на стандардни излаз:
cout << (int)c.
Често је потребно за учитани карактер утврдити којој класи припада
(цифра, мало или велико слово, знак интерпункције, белина и слично). Ово
је могуће утврдити коришћењем функција декларисаних у заглављу
<cctype>, као што су:
isdigit– проверава да ли је задати карактер цифраislower– проверава да ли је задати карактер мало словоisupper– проверава да ли је задати карактер велико слово
Све ове функције као аргумент примају карактер за који испитујемо одговарајући услов, а враћају вредност различиту од 0 ако је провера успела, односно вредност 0 ако није.
Уместо коришћења библиотечких функција могуће је имплементирати
решење које се ослања на чињеницу да се карактери у језику C++ интерно
репрезентују својим ASCII кодовима, па се карактери могу поредити
стандардним релацијским операторима (<=,
>=, <, >,
== и !=). Поређење карактера је заправо
поређење њихових кодова. Даље, ASCII кодови имају особину да су сва мала
слова и сва велика слова енглеске абецеде поређана једно иза другог по
абецедном редоследу, док су цифре поређане једна иза друге по нумеричкој
вредности. То омогућава да се провера да ли је карактер мало слово
енглеске абецеде изврши тако што се провери да ли је његов кôд између
кодова карактера 'a' и 'z' тј. да ли припада
интервалу од 'a' до 'z' (ако је учитани
карактер c, провера се врши условом
'a' <= c && c <= 'z'). Слично важи и за
велика слова и за цифре (провера да ли је карактер c цифра
може се формулисати условом
'0' <= c && c <='9').
Поред наведених функција, у заглављу <cctype>
декларисане су и функције које конвертују мала у велика слова и обратно.
Прецизније, постоје наредне функције које раде над појединачним
карактерима:
toupper– малo слово трансформише у велико, док остале карактере не мењаtolower– велико слово трансформише у мало, док остале карактере не мења
Мало слово се може трансформисати у велико слово и тако што се прво
одреди које је то по реду слово у абецеди (најбоље је да бројање креће
од нуле), тако што се од тог карактера тј. његовог кода одузме карактер
'a' тј. његов кôд, а затим се нађе велико слово које има
тај редни број у абецедном реду свих великих слова, тако што се на
карактер 'A' тј. његов кôд дода редни број карактера.
Дакле, ако је променљива c садржи мало слово, његову
трансформацију у велико слово можемо извршити изразом
'A' + (c - 'a') тј. c - 'a' + 'A'.
Трансформација великих у мала слова вршила би се потпуно аналогно,
изразом c - 'A' + 'a'.
Карактерски тип података
У језику C# постоји и подршка за представљање појединачног UNICODE
карактера коришћењем типа char који заузима 2 бајта.
Појединачни карактер можемо учитати позивом
Console.Read() која враћа вредност која је типа
int и то је број који одговара UNICODE коду учитаног
карактера ако је карактер успешно унет, односно -1 у супротном. Сам
карактер можемо добити тако што извршимо конверзију учитаног броја у тип
char позивом облика
char c = (char)Console.Read();.
Често је потребно за учитани карактер утврдити којој класи припада
(цифра, мало или велико слово, знак интерпункције, белина и слично). Ово
је могуће утврдити коришћењем уграђених метода структуре
Char, као што су:
Char.IsDigit– проверава да ли је задати карактер цифраChar.IsLower– проверава да ли је задати карактер мало словоChar.IsUpper– проверава да ли је задати карактер велико слово
Све ове методе се примењују на сам карактер, односно на његов кôд
(цео број) а враћају вредност која је логичког типа (true
или false).
Осим коришћења библиотечких функција могуће је имплементирати решење
које се ослања на чињеницу да се карактери у језику C# интерно
репрезентују својим UNICODE кодовима, па се карактери могу поредити
стандардним релацијским операторима (<=,
>=, <, >,
== и !=). Поређење карактера је заправо
поређење њихових кодова. Даље, UNICODE колационе секвенце имају особину
да су сва мала слова и сва велика слова енглеске абецеде поређана једно
иза другог по абецедном редоследу, док су цифре поређане једна иза друге
по нумеричкој вредности. То омогућава да се провера да ли је карактер
мало слово енглеске абецеде изврши тако што се провери да ли је његов
кôд између кодова карактера 'a' и 'z' тј. да
ли припада интервалу од 'a' до 'z' (ако је
учитани карактер c, провера се врши условом
'a' <= c && c <= 'z'). Слично важи и за
велика слова и за цифре (провера да ли је карактер c цифра
може се формулисати условом
'0' <= c && c <='9').
Поред наведених метода, структура Char располаже и
методама које конвертују мала у велика слова и обратно. Прецизније,
постоје наредне методе које раде над појединачним карактерима:
Char.ToUpper– малo слово трансформише у велико, док остале карактере не мењаChar.ToLower– велико слово трансформише у мало, док остале карактере не мења
Мало слово се може трансформисати у велико слово и тако што се прво
одреди које је то по реду слово у абецеди (најбоље је да бројање креће
од нуле), тако што се од тог карактера тј. његовог кода одузме карактер
'a' тј. његов кôд, а затим се нађе велико слово које има
тај редни број у абецедном реду свих великих слова, тако што се на
карактер 'A' тј. његов кôд дода редни број карактера.
Дакле, ако је променљива c садржи мало слово, његову
трансформацију у велико слово можемо извршити изразом
'A' + (c - 'a') тј. c - 'a' + 'A'.
Трансформација великих у мала слова вршила би се потпуно аналогно,
изразом c - 'A' + 'a'.