Textový řetězec
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
- 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
Definice řetězce v programu
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
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
- 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
- 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
- Zabraná paměť. PHP triky [online]. [cit. 2019-07-02]. Dostupné online. (česky)
Související články
Externí odkazy
- Obrázky, zvuky či videa k tématu textový řetězec na Wikimedia Commons
- Textový řetězec v České terminologické databázi knihovnictví a informační vědy (TDKIV)
- API třídy String v Javě Archivováno 19. 10. 2008 na Wayback Machine