Implementujte funkci s hlavičkou
int** report_occurences(char *text, char **paterns, int n)
Argumenty
text
je řetězec, ve kterém vyhledáváme vzory. Tento
řetězec může obsahovat libovolné znaky. Může být i prázdný.
patterns
je pole řetězců, které budeme vyhledávat.
Tyto řetězce neobsahují znak nového řádku a nemohou být
prázdné.
n
je velikost pole patterns.
Pro všechny řetězce v poli patterns
(označme aktuální
řetězec patterns[i]
) provede funkce následující:
Nalezne všechny výskyty řetězce patterns[i]
v
řetězci text
, jednotlivé výskyty se mohou překrývat. Pro
každý nalezený výskyt si zapamatuje číslo řádku, na kterém tento výskyt
našla. Například pro řetězec
"ahoj\nahoj svet svete\nsvet namorniku"
si funkce pro vzor
"svet"
postupně zapamatuje 2, 2, 3, protože
"svet"
se vyskytuje dvakrát na druhém řádku a jednou na
třetím řádku.
Funkce vrací pole polí typu int
(v dalším označme
toto pole ret
, pro index i
je tak
ret[i]
pole typu int
). Pole ret
má n
prvků (tj. stejně jako patterns
). Funkce
musí pro ret
i pro jednotlivá pole ret[i]
alokovat paměť.
Do pole ret[i]
zaznamená funkce informace o
nalezených výskytech vzoru patterns[i]
v řetězci
text
a to následovně: na indexu 0 v poli
ret[i]
je počet nalezených výskytů; na zbylých indexech
jsou po řadě zaznamenány čísla řádků, na kterých byly výskyty nalezeny
(viz výše). Například pro řetězec
"ahoj\nahoj svet svete\nsvet namorniku"
a pro vzor
"svet"
(tj. patterns[i]
je
"svet"
) pole ret[i]
obsahuje postupně 3, 2, 2,
3.
Je zakázáno používat funkce ze string.h
s výjimkou
strlen
.
Ve funkci lze místo char*
použít string
z
bonusových úloh. Hlavička funkce tak bude
int** report_occurences(string text, string* patterns, int n)
(Možnost zvolit si string
místo char*
je
volitelná, pro splnění úkolu stačí zaslat jednu verzi funkce, buď s
char*
nebo se string
.)