{{indexmenu_n>4}} ====== 4 - Pole variabilní délky a textové řetězce ====== * 1D pole variabilní délky * Textový řetězec jako pole znaků * [[http://www.asciitable.com/|ASCII tabulka]] * Délka textového řetězce: [[http://www.tutorialspoint.com/c_standard_library/c_function_strlen.htm|strlen]] * size_t strlen(const char *str) * Porovnání řetězců: [[http://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm|strcmp]], [[http://www.tutorialspoint.com/c_standard_library/c_function_strncmp.htm|strncmp]] int strcmp(const char *str1, const char *str2) int strncmp(const char *str1, const char *str2, size_t n) * pro vyučující: [[courses:b3b36prg:internal:tutorialinstruction:04|]] ===== Úkoly na cvičení ===== ==== Pole variabilní délky ==== - Napište program, který provede inicializaci 1D pole. Velikost pole zadá uživatel ze standardního vstupu. Protože se jedná o inicializaci za běhu programu, je třeba zkompilovat program s podporou standardu C99. - Pole naplňte celými čísly ze standardního vstupu. - Doplňte program tak, aby prošel pole pomocí cyklu a vypsal jednotlivé prvky pole. Zkuste napsat cyklus tak, aby program vypsal pole ve více sloupcích. - Napište funkci, která vypíše prvky pole, které je jejím argumentem. Funkci implementujte v přechozím programu. - Napište funkci, která naplní pole zadané velikosti náhodnými celými čísly v zadaném rozsahu. Vytvořené pole je návratovou hodnotou funkce. - Naplňte pole pomocí funkce z předchozího bodu. Napište funkci, která určí četnost čísel v tomto poli (histogram). === Další úkoly === - Napište funkci, která setřídí pole metodou counting-sort. Nesetříděné pole je argumentem funkce, návratovou hodnotou funkce je pole setříděné. ==== Textové řetězce ==== * Definujte textový řetězec "Everybody likes PRG" a vypište ho. Následně vypište z tohoto řetězce pouze "likes PRG" a nakonec řetězec změňte na "Tom likes PRG" a vypište ho. Přemýšlejte, jak to provést nejúsporněji. * Naprogramujte funkce ''strlen'', ''strcmp'' a ''strncmp''. === cat === * Naprogramujte zjednodušenou verzi programu ''cat''. Načtěte vstup ze stdin a zase ho vypište na výstup (stdout). echo "Hello world" | cat Hello world * Upravte program tak, aby vypsal vstup až za první mezerou: echo "Hello world" | cat2 world * Vypište každe slovo ze vstupu na samostatný řádek (za oddělovače slov považujte mezeru, konec řádku ''\n'' a tabulátor ''\t''). echo "Hello world and hello again " | words Hello world and hello again * Nyní zkuste totéž, ale za každé slovo vypište i jeho délku a slova 'and' a 'or' nejak označte. echo "Hello world and hello again " | words-len Hello 5 world 5 and 3 <-- hello 5 again 5 === tr === * Načtěte vstup a vypište ho s malými písmeny přepsanými na velké a naopak echo "Hello world" | cap hELLO WORLD * Nyní zkuste zjednodušenou verzi programu ''tr''. Program bude mít zadány dva argumenty na příkazové řádce, které budou sloužit jako předpis pro překlad znaků viz. následující příklad: echo "Hello world" | tr 'Hl' 'Xk' Xekko workd echo "Hello world" | tr 'dweji' '01234' H2llo 1orl0 * Zkuste si pospojovat dnešní programy. Např.: echo "Hello world and hello again " | words | cap hELLO WORLD AND HELLO AGAIN