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:

Eva

toupper 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: 2

Tyto 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.

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

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

Nebo se registrujte pomocí:

8/10