Ciao a tutti!!
sto scrivendo una funzione ricorsiva in C che date 2 stringhe verifica se la seconda è inclusa nella prima.
ho abbozzato qualcosa ma non funziona ancora![]()
, qualcuno puo' darmi qualche dritta?
grazie infinite
Ciao a tutti!!
sto scrivendo una funzione ricorsiva in C che date 2 stringhe verifica se la seconda è inclusa nella prima.
ho abbozzato qualcosa ma non funziona ancora![]()
, qualcuno puo' darmi qualche dritta?
grazie infinite
posta un po di codice di quello che hai fatto e vediamo cosa si puo fare. . .
Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore
Mi sto imbattendo anche io in questo problema...
Ho provato a risolverlo ma non so se sia giusto, ecco il mio codice:
int sottostringa (char *s1, char *s2){
int i=0;
int j=0;
if (s2[j]=='\0') return 0;
if (s1[i]=='\0') return 1;
else if (s1[i] != s2[j]) return sottostringa(&s1[0],&s2[j+1]);
else return sottostringa (&s1[i+1],&s2[j+1]);
return 0;
}
cosi è sbajato...perche esempio nel caso di stringhe sovrapposte ti dara sempre 0...usa una funzione ausiliara...![]()
non basterebbe invertire i 2 if?
a parte qst che è un'osservazione giusta...se fai &s[0] nn torna indietro...ma rimane sempre nella stessa posizione...perche l'indirizzo parte da quella chimata ricorsiva..
quando l'ho testato sembrava giusto...quale potrebbe essere un metodo per tenermi l'indirizzo al primo elemento originario mantenendo sempre lo stesso prototipo?
usa lo stesso prototipo per la funzione...ma nella funzione chiami un'altra funzione dove gli passi altri due puntatori alle teste delle due stringhe..praticamente solo la seconda funzione è ricorsiva...co la prima inneschi la ricorsione..
ci ho provato ma nn mi riesce...non è ke mi potresti scrivere una parte del codice della sottoprocedura?
se vuoi ti scrivo tutto il programma...
iint sottostringa(char *s1,char *s2){
if(*s1=='\0')
return 1;
if(*s2=='\0')
return 0;
return sottostringaAus(s1,s2,s1,s2);
}
int sottostringaAus(char *str1,char *str2,char *testa1,char *testa2){
if(*str1!='\0' && *str2!='\0'){
if(*str1==*str2)
return sottostringaAus(str1+1,str2+1,testa1,testa2);
else return sottostringaAus(testa1,testa2+1,testa1,testa2+1);
}
if(*str1=='\0') return 1;
else return 0;
}