Řetězce
Z předešlých seminářů víme jak pomocí datového typu char
reprezentova znak z ASCII tabulky.
Řetězec je sekvence znaků a pro sekvenci hodnot stejného typu jsme si na 5. semináři představili pole.
V jazyku C tedy řetězce reprezentujeme pomocí pole znaků.
char greeting[] = "Hello World!";
Pole reprezentující řetězec "Hello World!"
ma délku 13, protože pole musí být délky pocet_znaku + 1
.
Poslední znak v poli je rezervován pro ukončovací "nulu" '\0'
. Řetězec tedy vypadá následovně:
{'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'}
Délka řetězce
int length = 0;
char greeting[] = "Hello World!";
// Cyklus dokončí procházení jakmile bude greetings[length] == '\0'.
while(greeting[length]) {
length += 1;
}
Výpis řetězce
char greeting[] = "Hello World!";
printf("Greeting message: %s\n", greeting );
return 0;
Úkoly
Napište program, který převede všechny malé znaky v řetězci na velké.
Napište program, který určí maximální počet znaků, na kterých je konec řetězce r1 stejný jako začátek řetězce r2. Například pro řetězce ahoj a hojnost jsou to tři znaky (shoda je na řetězci hoj), pro řetězce ahoj a baba je nula znaků.
V jazyku C napiště program, který pro zadaný řetězce text
a vzor
,
najde všechny výskyty řetězce vzor
v řetězci text
.
Pro každý takový výskyt vypíše na obrazovku index počátečního písmena, kterým začíná vzor v textu.
Příklady
char text[] = "ahoj svete";
char vzor[] = "svete";
Výstup:
5
char text[] = "blablabla";
char vzor[] = "bl";
Výstup:
0 3 6
char text[] = "ah";
char vzor[] = "bkdoalskd";
Výstup:
Vzor ah se v textu bkdoalskd nenachází.
char text[] = "aaaa";
char vzor[] = "aa";
Výstup:
0 1 2
Šablona
#include <stdio.h>
int main () {
char text[] = "vzorovy text. je to text, ve kterem budu vyhledavat vyskyty nejakeho vzoru";
char vzor[] = "vzor";
/* Zde doplňte Váš kód */
return 0;
}