6. seminář - Řetězce

TEACHINGZPC1

Ř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;
    }