|
|||||||
|
|
|
![]() |
|
|
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: 05:33.




















