Řetězec je ve správném tvaru, pokud obsahuje slova oddělená jednou mezerou. Přitom první ani poslední znak není mezera. Příklady:
char ok[] = "toto je priklad spravneho vstupu";
char bad[] = " toto neni prilad \n spravneho vstupu ";
char empty=""; // prazdny retezec je ve spravnem tvaru
Naprogramujte funkci s následující hlavičkou.
int delete_words(char src[], char words[])
Oba argumenty jsou řetězce ve správném tvaru (ve funkci to není nutné
nijak testovat). Funkce smaže z řetězce src
všechna slova,
která se nacházejí v řetězci words
. Po provedení funkce
musí být řetězec src
ve správném tvaru, do řetězce
words
nesmí funkce zapisovat. Návratovou hodnotou funkce je
počet smazaných slov. Není povoleno používat knihovní funkce mimo těch z
stdio.h a assert.h.
Nápověda:
naprogramujte si pomocné funkce, např. pro kontrolu shody slov
vyskytujících se v src
a words
na daných
indexech.
znak v řetězci smažeme tak, že všechny znaky napravo od něj a nulu na konci posuneme o jedno políčko doleva.
dejte si pozor na přístup do pole s příliš velkým (či malým) indexem
netestujte následujícím způsobem:
("ahoj svete", "ahoj"); delete_words
Do řetězce "ahoj svete"
totiž nelze zapisovat a program
spadne. Testovat je nutné následovně:
char src[] = "ahoj svete";
(src, "ahoj"); delete_words
k úkolu je přiložen soubor k otestování (pokud všechny testy projdou, je velká šance, že je úkol správně. Pořád ale můžete dělat chyby v přístupu do pole na neplatném indexu, to si musíte otestovat sami). Soubor lze stáhnout zde. Tento soubor není povinné používat.