PDA

View Full Version : Ricerca in c...


marcus81
28-10-2002, 20:34
Dunque dovrei implementare una procedura in C ke mi consenta di ricercare una parola all'interno di un testo,utilizzando degli array di caratteri...e ritorni il numero di volte ke la parole si trova nel testo...

int ricerca(char parola[10],char testo[50])

avevo pensato a due cicli for annidati x scandire i due array...ma come effettuare il controllo e incrementare il contatore di quante volte è presente una parola?

Suggerimenti?

ilsensine
28-10-2002, 20:45
Se ridefinisci i parametri come puntatori char * (formalmente non ti dovrebbe cambiare nulla al resto del programma) te la cavi così:

int ricerca(char *parola, char *testo) {
char *pos;
int ret = 0;
int size = strlen(parola);
if(size<1) return -1;
pos = strstr(testo, parola);
while(pos) {
testo = pos+size;
++ret;
pos = strstr(testo, parola);
}
return ret;
}

marcus81
29-10-2002, 22:45
ehm il fatto è ke dovrei farlo con gli array...

cionci
30-10-2002, 00:24
int cerca(const char *testo, const char *parola)
{
int ret = 0, i = 0, j = 0;
if(parola[0] == '\0')
return 0;
do {
if(parola[j++] != testo[i])
{
j = (parola[0] == testo[i]) ? 1:0;
}
if(parola[j] == '\0')
{
++ret;
j = 0;
}
} while(testo[i++] != '\0');
return ret;
}

Questa ti va bene ? :)

ilsensine
30-10-2002, 12:45
ehm il fatto è ke dovrei farlo con gli array...

Fatta la legge, trovato l'inganno:


int ricerca(char parola[10], char testo[50]) {
int ofs = 0;
int ret = 0;
int size = strlen(parola);
if(size<1) return -1;
while(strstr(testo+ofs, parola)) {
ofs += size;
++ret;
}
return ret;
}

ilsensine
30-10-2002, 14:07
Errata corrige:


int ricerca(char parola[10], char testo[50]) {
int ret = 0;
char *pos;
int size = strlen(parola);
if(size<1) return -1;
pos = strstr(testo, parola)
while(pos) {
++ret;
pos = strstr(pos+size, parola)
}
return ret;
}

marcus81
30-10-2002, 20:31
Grazie...come dovrei fare senza voi:)

ilsensine
30-10-2002, 20:35
Eh, ti toccherebbe studiare :D