No match for operator "!="

di il
14 risposte

No match for operator "!="

Rieccomi con un altro problema

in questa procedura, nella riga in grassetto mi da l'errore "No match for operator "!="
void noncomuni(string string1[DIM],string string2[DIM],string string3[DIM]){
     int i=0, j=0;
    [b] while(string1[i]!='\0'){[/b]
                             [b]while(string2[j]!='\0' || string2[j]==string1[i]){[/b]
                                                    j++;
                                                  
                                                  }
                             if(string1[i]!=string2[j]){
                                                        cout<<string1[i];
                                                        } 
                             i++;
                             
                             
                             }
     
     
     
     }
Non potendolo compilare non so se ho sbagliato qualcosa nel programma.
Dovrebbe stampare le lettere di stringa1 che non sono presenti in stringa2
tipo se sono "buongiorno" e "buon" mi stamperebbe "girn"

14 Risposte

  • Re: No match for operator "!="

    String è una classe che contiene un array di caratteri, '\0' è un carattere unico. Come pensi di fare il confronto.
  • Re: No match for operator "!="

    Sono agli inizi. Non c'è bisogno di essere altezzosi.
    Pensavo di farlo perchè ho messo string quindi il confronto è con il carattere che si trova nell'indice i dell'array. ma sicuramente sto sbagliando qualcosa.
  • Re: No match for operator "!="

    Ok te la passo buona, abbiamo tutti fatto la gavetta prima o poi. Cmq volevo dirti: string è la classe di std:: oppure è un tuo typedef.
    std::string è già una stringa, e mettendo string[DIM], stai definendo un array di stringhe. Il confronto di una stringa con un carattere non è permesso. Spero di essere stato più chiaro adesso.
  • Re: No match for operator "!="

    Si adesso è chiaro. Quindi per farlo devo fare un array di caratteri con il tipo char, giusto?
    Solo che l'esercizio mi chiede di farlo con le stringhe
  • Re: No match for operator "!="

    Allora se lo devi fare con le stringhe, la classe std::string non ha bisogno che tu li dica la dimensione massima. E' così furba da ampliarsi quando li serve. Quindi la tua definizione della funzione dovrebbe essere del tipo:
    void noncomuni(string string1,string string2,string string3){
  • Re: No match for operator "!="

    Sarebbe possibile mettere il codice minimo ma completo (quindi compilabile) che evidenzia il problema?
  • Re: No match for operator "!="

    Ok, questo è chiaro.
    Ma nell'algoritmo c'è un while che scorre fin quando la stringa non è finita, dove c'è quell'errore confrontandola con il carattere di fine stringa. Se non posso scorrerle lettera per lettera, come faccio a stampare i caratteri presenti in string1 che non sono presenti in string2?
    Spero di non essere stato troppo confusionario, grazie in anticipo.

    Sono riuscito a compilare senza errori. Ma credo che nell'algoritmo non vada bene qualcosa. mi stampa sempre stringa1, riuscite a capire perché? ç.ç

    EDIT: Ecco il codice:
    #include <iostream>
    #include <string.h>
    #define DIM 100
    
    
    using namespace std;
    
    void noncomuni(string string1,string string2);
    
    int main()
    {   int i,j;
        string stringa1, stringa2;
        cout<<"inserisci due parole:"<<endl;
                          cin>> stringa1;
                          cin>> stringa2;
        noncomuni(stringa1, stringa2);
        system("PAUSE");
        return 0;
    }
    
    void noncomuni(string string1,string string2){
         int i=0, j=0;
         while(string1[i]!='\0'){
                                 while(string2[j]!='\0' || string2[j]==string1[i]){
                                                        j++;
                                                      
                                                      }
                                 if(string1[i]!=string2[j]){
                                                            cout<<string1[i];
                                                            } 
                                 i++;
                                 
                                 
                                 }
         cout<<endl;
         
         
         }
    
    
  • Re: No match for operator "!="

    Prova un attimo questo. Se hai dubbi chiedi pure.
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void noncomuni(string string1,string string2);
    
    int main()
    {   
        string stringa1, stringa2;
        cout<<"inserisci due parole:"<<endl;
                          cin>> stringa1;
                          cin>> stringa2;
        noncomuni(stringa1, stringa2);
        system("PAUSE");
        return 0;
    }
    
    bool cercaLettera(string string2,char lettera)
    {
    	for(int i = 0; i < string2.length(); i++)
    	{
    		if(string2[i] == lettera)
    			return true;
    	}
    	return false;
    }
    
    void noncomuni(string string1,string string2)
    {
    	for(int i = 0; i < string1.length(); i++)
    	{
    		if(!cercaLettera(string2,string1[i]))
    			cout << string1[i];
    	}
    	
    	cout<<endl;
    }
    
  • Re: No match for operator "!="

    Ok adesso provo... ma più che risolvere l'esercizio il mio interesse era capire dove avevo sbagliato nel mio algoritmo e se poteva essere "aggiustato"
  • Re: No match for operator "!="

    Il tuo problema sta quì:
    
    if(string1[i]!=string2[j]){
    
    j è gia andato oltre string2 e string2[j] non è una posizione valida se il carattere di string1 esiste in string2.
  • Re: No match for operator "!="

    Quindi come potrei fare per risolverlo? inizializzare di nuovo j dopo il ciclo?
  • Re: No match for operator "!="

    Così è + semplice da capire?
    
    void noncomuni(string string1,string string2)
    {
    	for(int i = 0; i < string1.length(); i++)
    	{
    		int j = 0;
    		for(j = 0; j < string2.length(); j++)
    		{
    			if(string2[j] == string1[i])
    				break;
    		}
    		if(j >= string2.length())
    			cout << string1[i];
    	}
    	
    	cout<<endl;
    }
    
    In sostanza è uguale al tuo codice, salvo il fatto che quando trovi un carattere uguale esci dal ciclo interno. Se non trovi allora j è andato oltre string2 e puoi stampare string1.
  • Re: No match for operator "!="

    Ok, ora ho capito.
    Ma c'è un qualche motivo per cui è preferibile l'uso dei for invece che dei while?
    Con i while non bisogna ricorrere alla .lenght che non conoscevo, è ottima comunque!
  • Re: No match for operator "!="

    Non centra for oppure while. la classe string ha una funzione membro length(). Lo puoi bennissimo usare con il while.
    while(i < string.length())
Devi accedere o registrarti per scrivere nel forum
14 risposte