Znakowy typ danych – Wikipedia, wolna encyklopedia
Znakowy typ danych (ang. character data type) – typ danych stosowany w wielu językach programowania, reprezentujący jeden znak tekstu.
Realizacja i właściwości
[edytuj | edytuj kod]Typ znakowy jest realizowany poprzez określony kod znaku, w zależności od implementacji może to być ASCII, EBCDIC, Unicode lub inny. Zapis konkretnej wartości typu znakowego w kodzie źródłowym dokonuje się za pomocą literału znakowego. W takich językach jak C czy C++, typ znakowy to po prostu 1-bajtowa liczba całkowita ze znakiem, w przypadku typu signed char
, lub bez znaku, dla typu unsigned char
. Natomiast w Pascalu, typ znakowy nie jest typem liczbowym i do konwersji typu używa się funkcji Asc
lub Chr
.
Popularne implementacje
[edytuj | edytuj kod]Java
[edytuj | edytuj kod]char
C/C++
[edytuj | edytuj kod]char
signed char
unsigned char
Fortran
[edytuj | edytuj kod]character
Pascal
[edytuj | edytuj kod]char
Przykłady zastosowań
[edytuj | edytuj kod]Przykład w C
[edytuj | edytuj kod]Przykładowe działania na zmiennej typu char
:
#include <stdio.h> char abs(char c_char) { if (c_char >= 0) { return c_char; } return -c_char; } int main() { char c_znak; c_znak = 'a'; /* widzimy, że znak jest zapisany jako liczba. */ printf("Znak %c = %d.\n", c_znak, c_znak); /* prosta operacja: */ c_znak+= 4; // zwiększenie znaku o 4 printf("Po zwiększeniu o 4, znak %c = %d.\n", c_znak, c_znak); /* różnica dwóch znaków: */ char c_znak2 = 'o'; printf("między znakami %c (%d) a %c (%d) jest %d różnicy.\n", c_znak, c_znak, c_znak2, c_znak2, abs(c_znak - c_znak2)); /* inne zastosowanie typu char (proste obliczenia arytmetyczne): */ for (unsigned char i = 0; i < 16; ++i) { printf("%d * %d + 2 = %d\n", i, i, i * i + 2); } }
Wynik działania:
Znak a = 97. Po zwiększeniu o 4, znak e = 101. Między znakami e (101) a o (111) jest 10 różnicy. 0 * 0 + 2 = 2 1 * 1 + 2 = 3 2 * 2 + 2 = 6 3 * 3 + 2 = 11 4 * 4 + 2 = 18 (...)
Przykład w Fortranie
[edytuj | edytuj kod]Przykład (zmienna buffer
o długości 128 B):
character*(128) buffer buffer = 'abc' l = len(buffer) buffer = buffer(:l) + 'cdef ' l = len(buffer) buffer = buffer(:3) // ' xyx ' // buffer(4:) // ' pqr ' print *, '#' // buffer(:len(buffer))// '#'
Wynik działania - na wyjściu zobaczymy:
#abc xyx cdef pqr #
Powyżej wykorzystano:
- standardową funkcję
len
określającą pozycję od lewej ostatniego znaku różnego od NUL (chcąc odrzucić końcowe spacje należy użyć funkcjilen_trim
) - tworzenie wycinka zmiennej var typu
character
:- znaki nr m do n (włącznie): var
(
m:
n)
- od początku do nr n włącznie: var
(:
n)
- od znaku nr m do końca: var
(
m:)
- znaki nr m do n (włącznie): var
- konkatenację łańcuchów: operator
//
lub+