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

  • 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

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

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

Související články

Externí odkazy

Pahýl
Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.
Autoritní data Editovat na Wikidatech
  • NKC: ph195841
  • TDKIV: 000000283
  • GND: 4067448-4