Funkce pro znaky
Knihovna ctype.h obsahuje funkce, které pracují s jedním znakem. Dvě z nich převádějí mezi velkými a malými písmeny:
toupper(znak)dá velké písmeno:toupper('a')je'A';tolower(znak)dá malé písmeno:tolower('Q')je'q'.
Ostatní znaky zůstanou, jak jsou: toupper('5') je '5' a toupper('A') je 'A'.
#include <ctype.h>
#include <stdio.h>
int main(void) {
char jmeno[] = "eva";
jmeno[0] = toupper(jmeno[0]);
printf("%s\n", jmeno);
return 0;
}Program vypíše:
Evatoupper znak, který dostane, nezmění. Dá vám nový znak a ten musíte uložit: jmeno[0] = toupper(jmeno[0]);. Samotný řádek toupper(jmeno[0]); se přeloží, ale jméno zůstane eva, protože nový znak se zahodí. (Výsledek je číslo typu int, kód znaku. Když ho uložíte do proměnné typu char nebo vypíšete pomocí %c, je z něj zase znak.)
Další funkce odpovídají na otázku o znaku:
isupper(znak): je to velké písmeno?isalpha(znak): je to písmeno?isdigit(znak): je to číslice od'0'do'9'?
Odpovědí je číslo: 0 znamená ne, jakékoli jiné číslo ano. Proto je používejte rovnou jako podmínku, jak to znáte z lekce o podmínkách: if (isdigit(znak)). Tento cyklus spočítá číslice v kódu:
char kod[] = "R2D2";
int cislic = 0;
for (int i = 0; kod[i] != '\0'; i++) {
if (isdigit(kod[i])) {
cislic++;
}
}
printf("Číslic: %d\n", cislic);Program vypíše:
Číslic: 2Tyto funkce znají jen písmena anglické abecedy, bez diakritiky. To je další důvod, proč psát řetězce, které procházíte po znacích, bez háčků a čárek.
Jak psát:
Pokyny
Někdo napsal název města se zapnutým Caps Lockem. Přidejte #include <ctype.h> a řetězec mesto opravte: první znak změňte na velké písmeno pomocí toupper a všechny ostatní na malá pomocí tolower v cyklu, který začne na indexu 1. Potom město vypište: Opraveno: Brno.
Pod to vytvořte char kod[] = "B4X-27Q9";. Projděte ho cyklem, spočítejte v něm číslice pomocí isdigit a písmena pomocí isalpha a vypište Číslic: 4, písmen: 3.
Začněte programovat zdarma
8/10