Délka řetězce

Kolik znaků má řetězec? Na to sizeof nestačí: udává velikost celého pole i s '\0' a později v této lekci uvidíte pole, která mají víc místa, než jejich text potřebuje. Jazyk C na to má hotovou funkci. Funkce je pojmenovaný kus kódu, který dělá jednu práci. Použijete ji tak, že napíšete její název a do závorek to, s čím má pracovat. Funkcí je i printf.

Funkce pro práci s řetězci jsou v knihovně string.h. Knihovna je sada hotových funkcí. Abyste je mohli používat, vložte na začátek programu její hlavičkový soubor, stejně jako stdio.h kvůli printf:

#include <stdio.h>
#include <string.h>

int main(void) {
    char jmeno[] = "Anna";
    int delka = strlen(jmeno);
    printf("%s má %d písmena\n", jmeno, delka);
    return 0;
}

Program vypíše:

Anna má 4 písmena

Funkce strlen (length znamená délka) spočítá znaky před nulovým znakem, samotný '\0' nezapočítá. Znaky jsou i mezery a interpunkce, takže "Ahoj, Tome!" má délku 11. Když zapomenete #include <string.h>, chybová hláška začne slovy call to undeclared library function 'strlen' a poznámka (note) pod ní napoví, který hlavičkový soubor chybí.

Proč se délka nejdřív ukládá do proměnné delka? Možná vás napadne napsat strlen rovnou do printf, jenže pak program nepůjde přeložit:

char jmeno[] = "Anna";
printf("%d\n", strlen(jmeno));
main.c:6:20: error: format specifies type 'int' but the argument has type '__size_t' (aka 'unsigned long') [-Werror,-Wformat]

strlen dává výsledek jako jiný druh celého čísla, size_t, který nemůže být záporný, a %d je jen pro int. Když výsledek uložíte do proměnné typu int, převede se na int a %d pak sedí. (Clang pod hláškou navrhuje %zu, formátovací značku pro size_t. Funguje i ta.)

Díky délce najdete poslední znak. Je na indexu delka - 1, protože indexy začínají nulou. Na indexu delka je '\0':

char jmeno[] = "Anna";
int delka = strlen(jmeno);
printf("Poslední písmeno: %c\n", jmeno[delka - 1]);

Program vypíše:

Poslední písmeno: a

Pozor na písmena s diakritikou, třeba č, ř nebo á. Text se ukládá v kódování UTF-8 a v něm takové písmeno zabírá dva znaky typu char:

int delka = strlen("Novák");
printf("%d\n", delka);

Program vypíše:

6

Na indexu 3 textu "Novák" tak není celé á, ale jen jeho první polovina. Vypisovat texty s diakritikou můžete bez obav. Řetězce, se kterými pracujete po jednotlivých znacích, ale pište bez diakritiky.

Pokyny

Na začátek programu přidejte #include <string.h>. Pod printf uložte délku řetězce mesto do proměnné delka typu int pomocí strlen a vypište ji tak, aby se ve výpisu objevil řádek Počet písmen: 7.

Potom vypište poslední písmeno města, mesto[delka - 1], pomocí %c: Poslední písmeno: c.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

3/10