Textový řetězec

datový typ reprezentující konečnou posloupnost znaků

Textový řetězec (anglicky string) je v programování název datového typu sloužícího k uložení konečné posloupnosti znaků.

V teorii formálních jazyků používané v matematické informatice, matematické logice a matematické lingvistice je řetězec konečná posloupnost symbolů patřících do určité konečné množiny nazývané abeceda.

Typy textového řetězce editovat

  • konstantní – neměnný obsah (generovaný při překladu programu)
  • staticky alokovaný paměťový prostor pro řetězec – řetězec má omezenou maximální délku
  • dynamicky alokovaný paměťový prostor pro řetězec – řetězec má maximální délku omezenou jen velikostí volné paměti

Fyzická implementace textového řetězce editovat

  • délka řetězce je definována zarážkou na konci řetězce (např. hodnota 0 na konci řetězce v jazyku C)
  • délka řetězce je uložena v pomocné struktuře definující řetězec – deskriptoru řetězce (např. typ String v Pascalu)

Definice řetězce v programu editovat

V nízkoúrovňových jazycích typu C se musí každý řetězec definovat jako datový typ pole znaků (char[]). Každý takový řetězec musí být ukončen znakem '\0', který se nepočítá do délky řetězce. Příklad definice prázdného řetězce o délce 100 znaků:

char retezec[100]; // Pozor - implicitně vynulováno jen u globální proměnné, jinak přidejte = "";

Dále je možné do řetězce rovnou fyzicky dosadit jednotlivé znaky (inicializovat pole znaků); to se dělá pomocí uvozovek:

char retezec[100] = "nejaky, max 99 osmibitovych znaku dlouhy retezec, bla, bla, bla, ...";

Také je možné používat řetězcové literály (konstanty, které nelze přepisovat):

char *ukazatel_na_retezec = "nejaky, libovolne dlouhy retezec, bla, bla, bla, ...";

Jazyk C neumí žádné další operace s řetězci – musí se volat funkce, které jsou součástí standardních knihoven.

V některých ostatních jazycích není nutné uvádět, že se jedná o řetězec a jak je dlouhý. Stačí jednoduše definovat proměnnou.

Příklad z jazyka PHP:

<?php
$retezec = "Já jsem nějaký řetězec a můžu obsahovat všemožné znaky z ASCII tabulky jako %, =, ' a jiné, ale třeba i z tabulky UNICODE (např. ▒, ☼, ♪). Můžu mít libovolnou velikost a jsem reprezentován dynamicky, podle velikosti paměti.";

Vnitřní implementace řetězce v PHP (a i v mnoha dalších dynamicky typovaných jazycích) funguje tak, že se nejprve vytvoří pole znaků základní délky podle obsahu řetězce, které se případně dynamicky rozšíří podle potřeby.[1] Takto lze libovolně do řetězce přidávat další obsah. Velikost vyhrazené paměti pro řetězec bude vždy mocnina dvojky.

Tisk řetězce editovat

V nízkoúrovňových jazycích se řetězec tiskne voláním funkce (puts, printf, fprintf), v aplikovaných jazycích (např. PHP) lze volat jen jako dynamická proměnná.

Tento zápis v jazyce C vypíše obsah řetězce na standardní výstup:

puts(retezec); // vypise retezec

Tento zápis v jazyce C++ vypíše nultý znak (jazyky C i C++ indexují pole od nuly):

cout << retezec[0]; // vypis prvního znaku (jen pro neprazdny retezec)

Celý řetězec lze vypsat v aplikovaných jazycích, např. v PHP:

<?php
echo $retezec; // vypise retezec

Operace s textovým řetězcem editovat

  • získání znaku z i-té pozice textového řetězce: s[i]
  • délka textového řetězce |s|
  • spojení textových řetězců (zřetězení, concatenation) s1 + s2
  • konverze velkých abecedních písmen na malá písmena
  • konverze malých abecedních písmen na velká písmena

Rozšířené operace editovat

  • porovnání obsahu textových řetězců (ordinální nebo lexikální viz znaková sada)
  • vyhledání pozice znaku v textovém řetězci
  • vyhledání pozice podřetězce v textovém řetězci
  • rozdělování řetězce na více řetězců (rozdělení na podřetězce)

Reference editovat

  1. Zabraná paměť. PHP triky [online]. [cit. 2019-07-02]. Dostupné online. 

Související články editovat

Externí odkazy editovat