Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2015
    residenza
    Firenze
    Messaggi
    18

    Parola e frase palindrome

    Salve esperti!

    Ho fatto questo programma che verifica se una parola od una frase è palindroma.
    Il problema è che:
    - Una parola senza spazi riesce a verificarla (correttamente)
    - Il problema inizia con le frasi... ed ho capito che quando inserisco la parola nel vettore char, la parola dopo lo " " non si inserisce...
    Esempio:

    cout<<"Inserisci la parola da verificare: ";
    cin>> v; // v= pippo ... tutto ok
    cin>> v; // v= la mia casa ... scrive solo "la" ed i caratteri dopo no...


    Come mai?!
    Grazie a chi mi risponde.

    Ecco il codice intanto:

    codice:
    int main()
    {
        int c=50, lung, max, i;
        char v[c], v1[c];
        bool uguale=true;
        
        cout<<"Inserisci la parola da verificare: ";
        cin>> v ;
        
        lung= strlen(v); //calcola lunghezza stringa//
        max=lung-1;
        for(i=0;i<lung;i++) //copio la parola ribaltata in un altro vettore //
        {
            v1[max]= v[i];
            max--; 
        }
    
    
        for(i=0; (i<lung) && (uguale==true); i++ ) //confronto ogni carattere del primo vettore con il secondo, se il carattere è diverso, esce dal for //
        {
            if (v[i] !=v1[i]) uguale=false;
            
        }
    
    
       if(uguale==true ) cout<<"La parola e' palindroma \n";
       else cout<<"La parola non e' palindroma \n";
    
    
    system("pause");
    return 0;
    }
    Ultima modifica di light95; 06-03-2015 a 15:18

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    L'operatore >> legge fino al blank successivo.
    Puoi usare cin.getline() http://www.cplusplus.com/reference/i...tream/getline/
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2015
    residenza
    Firenze
    Messaggi
    18
    Potresti gentilmente farmi un esempio veloce?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da light95 Visualizza il messaggio
    Potresti gentilmente farmi un esempio veloce?
    Apri il link, più in giù c'è uno spezzone di codice.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2015
    residenza
    Firenze
    Messaggi
    18
    Ok, ti ringrazio... adesso riesco a fare caricare il vettore con il carattere ' ' incluso!
    Però, lo stesso problema si ripresenta quando faccio il controllo nel for dove se è != ' ' dovrebbe copiarmi la frase senza spazi nel vettore... il problema è non riesce a farlo proprio il controllo dello spazio!! :/
    Ecco il nuovo codice:

    codice:
    int main()
    {
    	int c=50, lung, max, i, spazio=0, k=0;
    	char v[c], v1[c] ;
    	bool uguale=true;
    	
    	cout<<"Inserisci la parola da verificare: ";
        
        std::cin.getline (v,c);
    
    
    	lung= strlen(v); //calcola lunghezza stringa//
    	
    	max=lung-1;
    
    
    	for(i=0;i<lung;i++) //se il carattere è diverso da " ", lo copia nel vettore ribaltato //
    	{
    		if(v[i] != ' ') 
    		{
    		v1[max]= v[i];
    		max--; 
    	    }
    	}
    
    
    
    
        for(i=0; (i<lung) && (uguale==true); i++ ) //confronto ogni carattere del primo vettore con il secondo, se il carattere è diverso, esce dal for //
    	{
    		if (v[i] !=v1[i]) uguale=false;
    		
    	}
    
    
       if(uguale==true ) cout<<"La parola e' palindroma \n";
       else cout<<"La parola non e' palindroma \n";
    
    
    system("pause");
    return 0;
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    La if che controlla lo spazio funziona, quello che poi non ha molto senso è la for seguente, quando confronti v[] e v1[] ... ricorda che in v[] gli spazi ci sono ancora.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2015
    residenza
    Firenze
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    La if che controlla lo spazio funziona, quello che poi non ha molto senso è la for seguente, quando confronti v[] e v1[] ... ricorda che in v[] gli spazi ci sono ancora.
    Guarda, ti ringrazio! Mi stavo svercellando per capire dove sbagliassi, alla fine era un errore stupidissimo... (che tra l'altro conosco anche, bah!)
    Ahahaha sono riuscito a completarlo, adesso riesce a verificare se è palindrome anche con le frasi

    Ecco il codice finale:

    codice:
    #include<iostream>
    #include <string.h>
    #include <conio.h>
    
    
    using namespace std;
    
    
    int main()
    {
        int c=50, lung, max, i, k=0, lung1;
        char v[c], v1[c], v2[c] ;
        bool uguale=true;
        cout<<"Inserisci la parola da verificare: ";
        gets(v);
        
        lung= strlen(v); //calcola lunghezza stringa//    
        for(i=0;i<lung;i++) //se il carattere è diverso da " ", lo copia in un vettore che conterrà tutte le parole senza " " //
        {
             if(v[i] != ' ') 
            {
            v1[k]= v[i];
             k++;
            }    
        }
        lung1=strlen(v1);
        max=lung1-1;
        for(i=0;i<lung1;i++) //ribalta i caratteri nel vettore dove sono contenuti tutti i caratteri senza " " //
        {
            v2[max]= v1[i];
            max--; 
        }
    
    
        for(i=0; (i<lung1) && (uguale==true); i++ ) //confronto ogni carattere del primo vettore con il secondo, se il carattere è diverso, esce dal for //
        {
            if (v1[i] !=v2[i]) uguale=false;
            
        }
    
    
       if(uguale==true ) cout<<"La parola e' palindroma \n";
       else cout<<"La parola non e' palindroma \n";
    
    
    system("pause");
    return 0;
    }
    Ultima modifica di light95; 07-03-2015 a 00:05

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Non ti serve copiare la stringa e invertirla, né eliminare spazi e/o punteggiatura.
    Prova a vedere se capisci come funziona questo spezzone di codine:
    codice:
    #include <iostream>
    #include <cstring>
    #include <cctype>
    
    
    using namespace std;
    
    
    int main() {
        char s[256];
        cout << "Inserisci una frase: ";
        cin.getline(s, 256);
        bool pal = true;
        for(int i = 0, j = strlen(s) - 1; pal && (i < j); ) {
            bool si = isalpha(s[i]), sj = isalpha(s[j]);
            if(si && sj) {
                pal = pal && (toupper(s[i]) == toupper(s[j]));
                /* in questo caso sarebbe equivalente
                    pal = toupper(s[i]) == toupper(s[j]);
                    in quanto nella condizione d'uscita compare pal.
                    Se così non fosse la forma in questo commento
                    sarebbe scorretta. */
                ++i; --j;
            } else {
                if(!si) ++i;
                if(!sj) --j;
            }
        }
        cout << (pal ?  "Palindromi": "Non palindromi") << endl;
        return 0;
    }
    Ultima modifica di Scara95; 07-03-2015 a 11:44 Motivo: precisazione sul codice
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.