Znakowy typ danych

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:

  1. 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ć funkcji len_trim)
  2. 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:)
  3. konkatenację łańcuchów: operator // lub +

Zobacz też[edytuj | edytuj kod]