Aiuto programma su confronto parole

di il
18 risposte

Aiuto programma su confronto parole

Aiuto sono nuovo nel forum, e mi presento gia rompendo le balle xD.... Venendo al dunque non riesco a trovare dov'è l'inghippo in questo programma che ho creato.

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    const int M=100;
    char p[M],p2[M];
    char c,d;
    int i=0,j=0,k=0,t=0,n=0;
    cout << "Dai la prima parola: ";
    c=cin.get();
    while(c!='\n' && i<M && c!=' ')
    {
        if (c>=65 && c<=90)
        {
            p[i]=c+32;
            i=i+1;
        }
        c=cin.get();
    }    
    cout << "Dai la seconda parola: ";
    d=cin.get();
    while(d!='\n' && j<M && d!=' ')
    {
        if (d>=65 && d<=90)
        {
            p[j]=d+32;
            j=j+1;
        }
        d=cin.get();
    }
    if(j>=i)
    {
         for(k=0;k<i;k++)
         {
                   if(p[k]==p2[k]) n=n+1;
                   else if(p[k]>p2[k])
                        {
                             cout<<"La parola "<<p<<" precede la parola "<<p2;
                             break;
                        }
                        else
                        {
                             cout<<"La parola "<<p2<<" precede la parola "<<p;
                             break;
                        }
         }
         if(n==k) cout<<"Le due parole sono uguali.";
         else cout<<"La parola "<<p2<<" e' prefisso della parola "<<p;
    }
    else
    {
         for(k=0;k<j;k++)
         {
                   if(p[k]==p2[k]) n=n+1;
                   else if(p[k]>p2[k])
                        {
                             cout<<"La parola "<<p<<" precede la parola "<<p2;
                             break;
                        }
                        else
                        {
                             cout<<"La parola "<<p2<<" precede la parola "<<p;
                             break;
                        }
         }
         if(n==k) cout<<"Le due parole sono uguali.";
         else cout<<"La parola "<<p<<" e' prefisso della parola "<<p2;
    }                                                 
system("pause");
return 0;
}
Il problema è che qualsiasi parola che inserisco lui mi dice che sono uguali... credo ci sia qualcosa di sbagliato nella condizione che comporta l'istruzione n=n+1.
Grazie in anticipo

18 Risposte

  • Re: Aiuto programma su confronto parole

    Prova a riformattare il codice. Così non si legge. Usa i tag code e /code rachiusi tra []
    Perche non usi il strcmp o meglio ancora usare la classe string e verificare se una stringa precede l'altra?
  • Re: Aiuto programma su confronto parole

    Strcmp lo potrei usare per il programma semplificato, però mi viene chiesto anche di vedere se una è prefisso dell'altra, si può fare con qualche comando?? ho provato a farlo manualmente.

    per l'indentazione.. io ho copiato il programma come lo avevo indentato, c'è qualche modo per mantenerlo come tale o solo mediante i tag code? edit: risolto
  • Re: Aiuto programma su confronto parole

    Guarda strcmp
    http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
    
    Returns an integral value indicating the relationship between the strings:
    A zero value indicates that both strings are equal. //zero uguali
    A value greater than zero indicates that the first character that does not match has a greater value in str1 than in str2; //str1 succede str2
    And a value less than zero indicates the opposite. //opposto
    
  • Re: Aiuto programma su confronto parole

    L'avevo già visto prima di postare qua quel comando. Però pensavo che restituisse un valore=0 solo quando le stringhe fossero identiche, e per identiche intendo ad esempio

    parola 1: asd
    parola 2: asd

    Restituisce 0 anche ad esempio per :

    parola 1: asdasd
    parola 2: asd
    ?

    Edit: A parte questo cmq, se hai un pò di pazienza vorrei anche solo sapere se nel codice che ho postato ci sono errori gravi( in tal caso dovrei ristudiarmi bene le stringhe), o c'è solo qualche sciocchezza dovuta all'orario di programmazione
  • Re: Aiuto programma su confronto parole

    
    parola 1: asdasd
    parola 2: asd
    
    int ret = strcmp(parola1,parola2);
    
    //ret = 1 quindi parola1 succede parola2.
    
    c.v.d.
  • Re: Aiuto programma su confronto parole

    E quello l'ho capito... il mio problema è diverso... ti faccio un altro esempio visto che questo nn e' stato chiaro:

    Interazione utente/interfaccia:
    
    1)
    Dai la prima parola: casato
    Dai la seconda parola: casa
    La parola casa precede la parola casato
    casa e' un prefisso di casato
    
    
    2)
    Dai la prima parola: casato
    Dai la seconda parola: casi
    La parola casato precede la parola casi
    
    nn so se hai capito cosa intendo. nel primo caso, la seconda parola è uguale alla prima tranne la parte "to" per cui e' prefisso.

    nel secondo caso, invece nn è prefisso.
  • Re: Aiuto programma su confronto parole

    Infatti strcmp fa esattamente ciò che serve a te . Provare per credere.
    cmq nel tuo codice non capisco questo:
    
    p[i]=c+32;
    
    c è sempre un carattere anche se il cin.get() te l'ha restituito come intero. Quindi non c'è bisogno di aggiungerli 32 e perche 32 poi che coincide con lo spazio.
  • Re: Aiuto programma su confronto parole

    Prova sto piccolo programma così ti rendi conto:
    
    #include <iostream>
    #include <cstring>
    
    int main()
    {
    	char a[100];
    	char b[100];
    
    	std::cin >> a;
    
    	std::cin >> b;
    
    	int i = strcmp(a,b);
    
    	std::cout << i << std::endl;
    	return 0;
    }
    
  • Re: Aiuto programma su confronto parole

    skynet ha scritto:


    infatti strcmp fa esattamente ciò che serve a te . Provare per credere.
    cmq nel tuo codice non capisco questo:
    
    p[i]=c+32;
    
    c è sempre un carattere anche se il cin.get() te l'ha restituito come intero. Quindi non c'è bisogno di aggiungerli 32 e perche 32 poi che coincide con lo spazio.
    quello e' per trasformare le maiuscole in minuscole
  • Re: Aiuto programma su confronto parole

    Esiste toupper e tolower. Non reinventare la ruota se ci sono delle funzioni già esistenti.
  • Re: Aiuto programma su confronto parole

    Ok grazie per il toupper ed il tolower, non li conoscevo .
    Per quanto riguarda il programma che hai postato l'ho provato e ancora nn credo mi risolva il problema. Per intenderci:
    do da input
    p1= baster
    p2= asder

    mi restituisce il valore 1, e cioè p2 precede p1, però p2 non è prefisso di p1. Capito cosa intendo?
  • Re: Aiuto programma su confronto parole

    Nel vocabolario io p2 lo trovo prima del p1. Questo fa strcmp.
  • Re: Aiuto programma su confronto parole

    Va be ho capito ti linko il testo dell'esercizio se no qua nn ce ne saltiamo fuori >.<
    
    (a) Scrivere un programma che legge da std input due parole a e b (max. 100 car.) e
    stampa su std output un messaggio che indichi quale delle due parole precede l'altra
    (secondo il normale ordine lessicografico), o se le due parole sono uguali. Per parola
    si intende una stringa non contenente spazi e a capo.
    Esempi d'uso (dati di input sottolineati)
    1.
    Dai la prima parola: gatto
    Dai la seconda parola: albero
    La parola albero precede la parola gatto 
    2.
    Dai la prima parola: casa
    Dai la seconda parola: casa
    Le due parole sono uguali
    (b) Estendere il programma in modo che sia in grado di determinare anche se una
    delle due parole date è prefisso dell'altra. Esempi d'uso 
    1.
    Dai la prima parola: casato
    Dai la seconda parola: casa
    La parola casa precede la parola casato
    casa e' un prefisso di casato 
    2.
    Dai la prima parola: casato
    Dai la seconda parola: casi
    La parola casato precede la parola casi
    
    Ora, la parte a) è banalmente risolvibile con strcmp, e questo io lo sapevo fare gia prima di postare qua. Il mio problema è nella parte b), che non è una semplice comparazione tra stringhe tramite strcmp. Per questo ho provato a impostare tutti i passaggi manualmente.
  • Re: Aiuto programma su confronto parole

    Strstr
    http://www.cplusplus.com/reference/clibrary/cstring/strstr/

    Funzioni già fatte da esperti migliori di te e di me messi insieme. Quì ti devi arrangiare un pò però. devi vedere con strlen quale delle due parole è + lunga. cerca la + corta in quella + lunga e se strstr ti ritorna un puntatore alla cella 0 della parola 1 allora sai che parola 2 è un prefisso della parola 1
Devi accedere o registrarti per scrivere nel forum
18 risposte