Ricerca in un array
Salve ragazzi,
qualcuno cortesemente può dirmi come implementare un programma in c che,data una stringa,chiedi all'utente una parola e verifica se tale parola si trova nella stringa (senza usare la funzione di libreria string.h) ?
grazie
qualcuno cortesemente può dirmi come implementare un programma in c che,data una stringa,chiedi all'utente una parola e verifica se tale parola si trova nella stringa (senza usare la funzione di libreria string.h) ?
grazie
Risposte
"gaetano0":
Salve ragazzi,
qualcuno cortesemente può dirmi come implementare un programma in c che,data una stringa,chiedi all'utente una parola e verifica se tale parola si trova nella stringa (senza usare la funzione di libreria string.h) ?
grazie
Potresti scrivere una funzione che in un ciclo while che termina al termine della parola lunga confronta la prima lettera della parola con la prima di quella che deve essere contenuta, se sono uguali incrementa un contatore di uno. Fai quindi dentro il ciclo un "if... else". Se il contatore è uguale alla lunghezza della parola da contenere ti fermi, altrimenti vai avanti. Se le lettere successive sono uguali incrementi di nuovo il contatore altrimenti lo azzeri e continui.
Può essere un po' complicato da spiegare ma non mi viene in mente altro
Chiamiamo 'a' la stringa che deve contenere, e 'b' la stringa che bisogna verificare che sia contenuta in 'a'.
I) Controlla che la stringa 'b' abbia lunghezza minore della stringa 'a'; se così non fosse allora 'b' NON può essere contenuta in 'a'.
II) Controlla che la stringa 'b' sia vuota; in tal caso allora 'b' E' sicuramente contenuta in 'a'.
A questo punto può partire l'algoritmo di ricerca
Setta un contatore 'count' a 0;
Scorri la stringa 'a' e ad ogni iterazione 'i' controlla se il carattere 'a' sia uguale a 'b[count]'; Se non sono uguali, riporta il contatore a 0 (nel caso fosse diverso da 0), e controlla che il carattere 'a' sia uguale a 'b[0]';
Se sono uguali incrementa il contatore e controlla che questi sia uguale alla lunghezza della stringa 'b'. In questo caso 'b' è contenuta in 'a'.
Se in nessuna iterazione sei riuscito a verificare che 'count==len(b)' allora 'b' NON è contenuta in 'a'.
PS: Non è necessario, come ti ha suggerito da @ludovica_97, iterare per tutta la lunghezza di 'a'. Se l'indice di iterazione 'i' diventa maggiore di 'len(a)-len(b)+count+1' stai sicuro che 'b' non è contenuta in 'a'.
Cioè ti devi fermare quando la lunghezza della stringa 'b' diventa maggiore del numero dei caratteri della stringa 'a' ancora da controllare.
I) Controlla che la stringa 'b' abbia lunghezza minore della stringa 'a'; se così non fosse allora 'b' NON può essere contenuta in 'a'.
II) Controlla che la stringa 'b' sia vuota; in tal caso allora 'b' E' sicuramente contenuta in 'a'.
A questo punto può partire l'algoritmo di ricerca
Setta un contatore 'count' a 0;
Scorri la stringa 'a' e ad ogni iterazione 'i' controlla se il carattere 'a' sia uguale a 'b[count]'; Se non sono uguali, riporta il contatore a 0 (nel caso fosse diverso da 0), e controlla che il carattere 'a' sia uguale a 'b[0]';
Se sono uguali incrementa il contatore e controlla che questi sia uguale alla lunghezza della stringa 'b'. In questo caso 'b' è contenuta in 'a'.
Se in nessuna iterazione sei riuscito a verificare che 'count==len(b)' allora 'b' NON è contenuta in 'a'.
PS: Non è necessario, come ti ha suggerito da @ludovica_97, iterare per tutta la lunghezza di 'a'. Se l'indice di iterazione 'i' diventa maggiore di 'len(a)-len(b)+count+1' stai sicuro che 'b' non è contenuta in 'a'.
Cioè ti devi fermare quando la lunghezza della stringa 'b' diventa maggiore del numero dei caratteri della stringa 'a' ancora da controllare.