Zdravím,
Když už tady je to téma s tím programováním tak by mě zajímalo tohle, protože jinde nemám kde koho otravovat. Mám úkol v Cčku napsat funkci, která vrátí počet výskytů podřetězce (slova) v řetězci. Nejsem s prácí s řetězci ješte tak sběhlej a na ten úkol mám ješte dost času, ale nešel mi net tak sem neměl co dělat
.
Úkol :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*funkcni prototypy*/
int pocet_vyskytu(char *p_vyskyt, char *p_retezec);
int main(void) {
int i, delka_vys, delka_ret;
char *retezec, *vyskyt;
retezec = (char *) malloc(101 * (sizeof(char)));
vyskyt = (char *) malloc(31 * (sizeof(char)));
printf ("Zadejte řetězec maximální délky 100 znaků: \n");
fgets (retezec, 101, stdin);
/*while (getchar() != '\n')
;
*/
delka_ret = strlen(retezec);
if (retezec[delka_ret-1] == '\n') {
retezec[delka_ret-1] = '\0';
}
printf ("Zadejte hledaný řetezec: \n");
fgets (vyskyt, 31, stdin);
delka_vys = strlen(vyskyt);
if (vyskyt[delka_vys-1] == '\n') {
vyskyt[delka_vys-1] = '\0';
}
i = pocet_vyskytu(vyskyt, retezec);
printf ("Počet výskytů řetězce %s je %d.\n", vyskyt, i);
}
int pocet_vyskytu(char *p_vyskyt, char *p_retezec) {
int pocet = 0;
char *p_c;
p_c = (char *) malloc(100 * (sizeof(char)));
while ((p_c = strstr(p_retezec, p_vyskyt)) != NULL) {
pocet++;
p_retezec = ++p_c;
}
return pocet;
}
a problém je v tom, že když zadám příliš dlouhou větu tak to zůstane v bufferu a automaticky se to použije ten zbytek i jako vyhledávaný řetězec a mě by zajímalo jestli tam lze dát nějakou podmínku na začátku jak mám zakomentovaný to while na vyprázdnění bufferu, že se to použije jen tehdy, když je to delší než má.
Ukázka :
Zadejte řetězec maximální délky 100 znaků:
Pejsek s kocickou si koupily novej dum. Bydleli tam asi pul roku a pak si pejsek nasel jinou kocicku. Kocicka z toho byla nestatstna a sla pejska zabit, protoze to byl peknej zmetek. Zili bez sebe stastne az do smrti.
Zadejte hledaný řetezec:
Počet výskytů řetězce . Kocicka z toho byla nestatst je 0.
jinak to funguje
.
PS: Kod není určitě dokonalej a určitě se tam najde spousta blbých a zbytečných věcí
. Začínám no