Funkce a řetězce
Řetězec je pole hodnot typu char, a tak ho funkce dostane jako parametr stejně jako jakékoli jiné pole:
#include <stdio.h>
void predstav_se(const char jmeno[]) {
printf("Jmenuji se %s.\n", jmeno);
}
int main(void) {
char kamarad[] = "Tomáš";
predstav_se("Anna");
predstav_se(kamarad);
return 0;
}Tento program vypíše:
Jmenuji se Anna.
Jmenuji se Tomáš.Funkci můžete předat text v uvozovkách i pole znaků. Od polí čísel z minulého cvičení se řetězec liší ve dvou věcech:
- Chybí počet. Řetězec končí nulovým znakem
'\0', a tak si funkce jeho konec najde sama: cyklem, který se zastaví na'\0', nebo pomocístrlen. - Před typem je slovo
const, které znáte z konstant. Je to slib, že funkce řetězec jen čte a nemění ho. Kdyby se o to pokusila, třeba příkazemjmeno[0] = 'X';, program by se nepřeložil:error: read-only variable is not assignable(do proměnné určené jen ke čtení nejde přiřadit). Pišteconstvždy, když funkce řetězec jen čte. Kdo bude funkci číst, hned uvidí, že text zůstane, jak je.
Funkce může řetězec projít cyklem a vrátit výsledek. Tato funkce spočítá, kolikrát se v textu objeví dané písmeno:
#include <stdio.h>
#include <string.h>
int pocet_pismen(const char text[], char pismeno) {
int pocet = 0;
int delka = strlen(text);
for (int i = 0; i < delka; i++) {
if (text[i] == pismeno) {
pocet++;
}
}
return pocet;
}
int main(void) {
printf("%d\n", pocet_pismen("kakao", 'a'));
printf("%d\n", pocet_pismen("Mississippi", 's'));
return 0;
}Tento program vypíše:
2
4Funkce bez const smí řetězec měnit. Stejně jako u jiných polí změna zůstane v poli volajícího:
#include <ctype.h>
#include <stdio.h>
void na_velka(char text[]) {
for (int i = 0; text[i] != '\0'; i++) {
text[i] = toupper(text[i]);
}
}
int main(void) {
char zprava[] = "ahoj";
na_velka(zprava);
printf("%s\n", zprava);
return 0;
}Tento program vypíše:
AHOJJedno ale funkce neumí: vrátit pole, a tak nemůže vrátit nový řetězec tak, jako vrací číslo. Když má funkce vytvořit text, zapíše ho do pole znaků, které jí předá volající, stejně jako na_velka mění zprava.
Jak psát:
Pokyny
Nad main napište funkci ohlas_hrace, která nic nevrací a má jeden parametr jmeno: řetězec, který funkce jen čte. Funkce vypíše řádek jako Na řadě je Eva. se jménem, které dostane.
V main vytvořte pole hrac s textem "Eva" a zavolejte ohlas_hrace(hrac). Pak zavolejte ohlas_hrace("Adam"). Program vypíše Na řadě je Eva. a Na řadě je Adam.
Pod funkci ohlas_hrace napište funkci pocet_cislic s parametrem text, opět řetězcem, který funkce jen čte. Funkce vrátí, kolik číslic text obsahuje; jestli je znak číslice, vám řekne isdigit z ctype.h. Na konci main, před return 0;, vypište výsledek pocet_cislic("leto2024") s popiskem: Počet číslic: 4.
Začněte programovat zdarma
10/12