|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
[C] Stringa palindroma
Ciao a tutti,
devo sviluppare in C una funzione che controlli se una stringa è palindroma usando la ricorsione. Sono arrivato ad un buon punto con questa funzione: Codice:
int isPalindrome(int i, int j) // i è 0(l'inizio della stringa) j è la lunghezza meno 1 { if (j == 0) { return 1; }else if (j == 1) { return 1; }else { if (str[i] == str[j]){ return isPalindrome(i+1,j-1); }else{ return 0; } } } Grazie
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Mi sembra assolutamente corretta e per di più minimale, non puoi risparmiare altre ricorsioni. Al limite puoi accorpare le due condizioni j=0 e j=1 in un singolo OR, ma per il resto, decidendo di farla ricorsivamente, mi pare assolutamente buona.
__________________
Il sole è giallo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Ma, io adesso l'ho modificata in questo modo:
Codice:
int isPalindrome(int i, int j) { if ((j-i) == 0) // <----------- { return 1; }else if ((j-i) == 1) // <---------- { return 1; }else { if (str[i] == str[j]){ return isPalindrome(i+1,j-1); }else{ return 0; } } }
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Dipende da cosa intendi per j. Se j è l'effettiva lunghezza della stringa, come hai scritto nel primo post, allora è giusto quello che hai postato all'inizio, escluso il fatto che effettivamente dovresti richiamare la riscorsione con isPalindrome(i+1,j-2), dal momento che avanzi di un carattere dall'inizio e ritorni indietro di 1 dalla fine (quindi la lunghezza della sottostringa diminuisce di 2). Se invece per j intendi la posizione dell'ultimo carattere all'interno della stringa iniziale, allora è corretto (ad occhio, senza controllare sui bound) il tuo secondo intervento
__________________
Il sole è giallo |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Per chiarezza posto anche il main:
Codice:
int main(){ int res; res = isPalindrome(0,strlen(str)-1); if (res == 1){ printf("The string is palindrome\n"); }else if (res == 0){ printf("The string is not palindrome\n"); }else{ printf("An error occured"); } } Comunque grazie mille per l'aiuto
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Codice:
#include <stdio.h> #include <string.h> int isPalindrome(int i, int j, char *str) { if (i >= j) return 1; if (str[i] == str[j]) return isPalindrome(i+1, j-1, str); return 0; } int main(void) { char *test[] = {"anna", "marianna", "saippuakivikauppias"}; int i; for (i = 0; i < sizeof test/sizeof test[0]; ++i) printf("\'%s\'%s e\' palindromo.\n", test[i], isPalindrome(0, strlen(test[i])-1, test[i]) ? "" : " non"); return 0; } |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Quote:
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() Ti potrebbe venire segnalato che manca un return per un path del codice...anche se in realtà c'è... Gli else sono inutili in tutti e tre i casi...tra l'altro i primi due if possono essere raggruppati... |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Quote:
Grazie
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:57.