[c++] invertire una stringa con funzione ricorsiva
ciao a tutti...devo scrivere un programma che data una stringa mi restituisce la stessa ma invertita; esempio ''Hello'' -> ''olleH'' utilizzando una funzione ricorsiva...ho scritto questo codice ma il programma non gira...sapreste dirmi dov'è che sbaglio?? grazie...
#include
#include
using namespace std;
string reverse(string frase){
string primo=frase.substr(0,1);
string resto=frase.substr(1, frase.length()-1);
frase=reverse(resto)+primo;
return frase;
}
int main()
{ string phrase;
cout << "Inserire frase:"<
cin>>phrase;
cout<
return 0;
}
#include
#include
using namespace std;
string reverse(string frase){
string primo=frase.substr(0,1);
string resto=frase.substr(1, frase.length()-1);
frase=reverse(resto)+primo;
return frase;
}
int main()
{ string phrase;
cout << "Inserire frase:"<
cin>>phrase;
cout<
return 0;
}
Risposte
Prima di buttarti a scrivere codice, prova prima ad elencare a parole i passi che l'algoritmo deve compiere.
Secondariamente è ricorsiva la funzione che hai scritto?
Secondariamente è ricorsiva la funzione che hai scritto?
io ho pensato di fare così...data la stringa, estraggo il primo carattere, quindi mi rimane la sottostringa ''resto'' a cui posso applicare di nuovo lo stesso procedimento..e così via...purtroppo è il primo esercizio che faccio sulle funzioni ricorsive quindi non so se quello che ho pensato possa essere giusto!
Avevo sbagliato a leggere, scusa.
L'algoritmo è giusto. Manca solo una cosa.
Carattere per carattere lui esegue l'inversione. Poi cosa succede ad un certo punto?
L'algoritmo è giusto. Manca solo una cosa.
Carattere per carattere lui esegue l'inversione. Poi cosa succede ad un certo punto?
finisce la stringa...ah forse devo mettere la condizione che la stringa deve essere diversa da '' '' (stringa vuota)?
si adesso funziona! grazie tante per l'aiuto!!!
in aggiunta a quanto detto fin'ora, un consiglio "realizzativo". ogni volta che implementi una qualsiasi funzione ricorsiva, che questa sia composta da uno o piu passi base, e da un passo ricorsivo. i passi base sono fondamentali, perchè ti permettono di far terminare la ricorsione (immagina se scrivi una funzione che calcola ricorsivamente il fattoriale di un numero. se non metti il passo base
hai una ricorsione infinita)
if(n==0) return 1
hai una ricorsione infinita)