Znaky řetězce
Řetězec je pole, a proto má každý jeho znak svůj index, počítaný od 0 jako u každého pole. jmeno[0] je první znak. Má datový typ char, takže ho vypíšete pomocí %c:
char jmeno[] = "Jana";
printf("%c\n", jmeno[0]);
printf("%c\n", jmeno[3]);Program vypíše:
J
aPoslední písmeno textu "Jana" má index 3 a na indexu 4 je nulový znak. Když ho vypíšete jako číslo pomocí %d, uvidíte, že tam opravdu je:
printf("%d\n", jmeno[4]);Program vypíše:
0Nepleťte si %s a %c: %s je pro celý řetězec, %c pro jeden znak. Program s printf("%s\n", jmeno[0]); nepůjde přeložit a Clang pod hláškou rovnou navrhne správnou formátovací značku, %c:
char jmeno[] = "Jana";
printf("%s\n", jmeno[0]);main.c:5:20: error: format specifies type 'char *' but the argument has type 'char' [-Werror,-Wformat]Znak řetězce můžete také změnit. Stačí do prvku přiřadit nový znak, stejně jako u každého pole:
char jmeno[] = "Jana";
jmeno[0] = 'H';
printf("%s\n", jmeno);Program vypíše:
HanaNový znak patří do jednoduchých uvozovek. Zápis jmeno[0] = "H"; by na místo jednoho znaku dával celý řetězec a dostali byste chybu s char[2], kterou znáte z minulého cvičení.
Na jednoduché uvozovky dejte pozor i v podmínkách. První písmeno zkontrolujete takto: if (jmeno[0] == 'H'). S dvojitými uvozovkami, if (jmeno[0] == "H"), se program sice přeloží, ale podmínka nebude splněná nikdy, protože porovnáváte jeden znak s celým řetězcem. Clang na to upozorní varováním, jenže varování se na tomto webu nezobrazují. Uvidíte jen, že program nedělá, co má.
Velikost pole se nemění. Pole jmeno má místo jen na 4 písmena a '\0', takže jmeno[5] = 'k'; je za koncem pole a program nepůjde přeložit. Jak udělat místo pro delší text, uvidíte později v této lekci.
Jak psát:
Pokyny
Vypište první a poslední znak řetězce slovo na jeden řádek, oddělené mezerou, pomocí %c. Ve výpisu by se měl objevit řádek p s.
Pod to změňte první znak řetězce slovo na 'l' a vypište celé slovo znovu pomocí %s: les.
Začněte programovat zdarma
2/10