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ísmenaFunkce 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: aPozor 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:
6Na 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.
Jak psát:
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
3/10