Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Palindromo
Forum - C/C++ - Palindromo

Avatar
bigjohn (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/10/2008

Segnala al moderatore
Postato alle 13:24
Venerdì, 10/10/2008
Salve a tutti.
Innanzitutto ringrazio per la cortese disponibilità tutti coloro disposti a trovare una soluzione a questo quesito.
Intanto vediamo la seguente definizione:
una parola è palindroma quando letta "da sinistra a destra" o "da destra a sinistra" presenta la stessa sequenza di caratteri.
Esempi di parole palindrome sono:
- anna
- otto
- acca
- erre
- esse
- ossesso
- esose
ecc.

Il programma C propostomi, e' di verificare se una parola è palindroma.
Purtroppo il codice sottostante non va bene in quanto mi da sempre la medesima risposta "la sequenza è palindroma"
indipendentemente che la parola digitata sia o meno palindroma.
Riuscite cortesemente a trovare l'errore?  

//---- inizio codice ----------
#include <stdio.h>
#include <stdlib.h>

#define MAX 32

int main()
{

char vett[MAX];
int  lvet;
int  i, j;

do {
    printf("Inserire la lunghezza della sequenza: "); //di quanti caratteri è composta la parola?
    scanf("%d", &lvet);
} while ((lvet>MAX) || (lvet<=0));
    printf("Inserire la sequenza:\n");  //qual e' la parola da verificare?
    for (i=0; i<lvet; i++)
        scanf("%c", & vett);
        
    i = 0;
    j = lvet - 1;
  
    while((i < lvet) && (vett == vett[j]))
    {
        i += 1;  
        j -= 1;  
        
}
    if (i >= lvet)
        printf("La sequenza e' palindroma.\n");
        else
        printf("La sequenza non e' palindroma.\n");
        
        system("pause");
}

//---- fine codice ---------------

Grazie per l'attenzione.
Gianni.

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 14:13
Venerdì, 10/10/2008
Testo quotato

Postato originariamente da bigjohn:

nel tuo post sono spariti gli indici degli array, quando la variabile era i, ma suppongo che sia a causa del fatto che "aperta quadra" "i"  "chiusa quadra" è il tag per impostare il corsivo dei post. Il codice andrebbe messo tra i tag "code"

Codice sorgente - presumibilmente C/C++

  1. for (i=0; i<lvet; i++)
  2.         scanf("%c", & vett[i]);





il problema è che al primo giro la scanf legge il carattere 10 che rimane nel buffer dopo aver letto lvet

per cui a un input di

4
anna

segue la lettura di vett come:

vett[0] = '\n'
vett[1] = 'a'
vett[2] = 'n'
vett[3] = 'n'

per risolvere questo problema puoi premettere uno spazio nella stringa di formato della scanf:

Codice sorgente - presumibilmente C/C++

  1. for (i=0; i<lvet; i++)
  2.         scanf(" %c", & vett[i]);



Ovviamente ci sono modi migliori di leggere una stringa ;)

Ultima modifica effettuata da gioser il 10/10/2008 alle 14:14
PM Quote
Avatar
bigjohn (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/10/2008

Segnala al moderatore
Postato alle 15:09
Venerdì, 10/10/2008
grazie per il cortese e tempestivo riscontro.
Adesso funziona... era questione dello spazio.
Se hai una soluzione migliore della mia da proporre, ogni consiglio è sempre ben accetto!!

PM Quote