6 - Textové řetězce

Cíle cvičení

  1. Textové řetězce.

Materiály

Textové řetězce

  • Definujte textový řetězec “Everybody likes PRP” a vypište ho. Následně vypište z tohoto řetězce pouze “likes PRP” a nakonec řetězec změňte na “Tom likes PRP” a vypište ho. Přemýšlejte, jak to provést nejúsporněji.
  • Naprogramujte funkce odpovídající funkcím strlen, strcmp a strncmp, např. pojmenované my_strlen.

Implementace variant programu cat

  • Naprogramujte zjednodušenou verzi programu cat, např. pojmenovanou cat-basic. Načtěte vstup ze stdin a zase ho vypište na výstup (stdout).

Příklad výstup cat-basic

  • Upravte program tak, aby vypsal vstup až za první mezerou , cat-skip

Příklady výstupu cat-skip

  • 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).

Příklad výstupu cat-words

  • Nyní zkuste totéž, ale za každé slovo vypište i jeho délku a slova “and” a “or” označte.

Příklad výstupu cat-words-len

Implementace variant programu tr

  • Načtěte vstup a vypište jej s malými písmeny přepsanými na velké a naopak

Příklad výstupu programu cap

  • Nyní zkuste zjednodušenou verzi programu tr-simple. Program bude mít zadány dva argumenty na příkazové řádce, které budou sloužit jako předpis pro překlad znaků.

Příklad výstupu tr-simple

  • Zkuste si pospojovat dnešní programy.

Příklad výstupu

FEL Abeceda

  • Naimplementujte program, který přeloží znaky 'A'–'Z' a 'a'–'z' na FEL abecedu. Ostatní znaky nechá nezměněné.
  • Abecedu je definována jediným polem znaků, ve kterém jsou jednotlivá slova za sebou a na mapování písemene abecedy na slovy je realizováno jako pole ukazatelů na textové řetězce.
  • V programu kontrolujte, že abeceda obsahuje všechna slova 'A'–'Z' začínající velkým písmenem, např. Bool test_alphabet(char *str);. Seznamte se s voláním assert() z knihovny assert.h.
  • Řetězec abecedy upravte tak, aby bylo možné tisknout slova abecedy, například funkcí printf(“%s”, words[i]). Funkci můžet pojmenovat například následovně.
    _Bool fill_words(char *alphabet, size_t n, char **words);
  • Při implementace uvažujte počet slova abecedy jako
    #define WORDS_N ('Z' - 'A' + 1)
    .
  • Program vhodně dekomponujte na funkce a implementujte (nebo použijte existující funkce), např. is_upper(), is_lower(), to_upper().

Příklad výstupu

  • V programu uvažujte možnost anglické a české abecedy definované jako

Anglická FEL abeceda

Česká FEL abeceda

  • Využijte symbolické konstanty jako textové literály

Definice abecedy

  • Která z následujících možností je správně a proč?

A. Pole znaků

B. Ukazatel na (posloupnost) znak(ů)

  • Implementujte test abecedy a nastavení pole ukazatelů na řetězce char* words[WORDS_N].
  • Implementujte překlad textu na stdin na FEL abecedu na stdout, případně ladící informace nebo chybová hlášení vypisujte na stderr.

Příklad hlavní funkce main()

  • Ověřte co dělá nastavení proměnné prev.

Další úkoly

  • Program rozšířte o přepínání anglické a české abecedy na základě hodnoty proměnné prostředí LANG=cs_CZ.UTF-8.
  • Program rozšiřte o dynamickou alokace pole znaků s abecedou.
  • Program rozšiřte o načítání abecedy ze souboru, např. použitím FILE *file = fopen(“soubor.txt”, “r”); a getc(file) s využitím dynamické alokace.

Příklad výstupu

courses/b0b36prp/labs/lab06.txt · Last modified: 2025/10/25 23:25 by faiglj