Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26

    [C++] Confrontare due stringhe

    Come da titolo ma stringhe inteso come
    codice:
    string nome;
    non array di char. Ho cercato in rete strcmp non lo accetta dice "No matching function for call to strcmp". Ho provato a confrontare con il doppio uguale ma in fase di esecuzione si blocca. Come posso fare?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Si vede che il problema è nel codice che segue ... mostralo, altrimenti come si fa a rispondere?
    Ultima modifica di oregon; 11-01-2015 a 02:06
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Concordo con oregon.
    Inoltre, la funzione strcmp accetta stringhe in stile C e non C++, quindi potresti scrivere

    codice:
    int res = strcmp(word1.c_str(), word2.c_str())
    

    Ma non è la via più semplice. Infatti la classe string mette a disposizione il metodo compare, quindi puoi fare

    codice:
    int res = una_stringa.compare(altra_stringa);

    Ma, di nuovo, non è la via più semplice. Puoi direttamente utilizzare l'operatore == che, come specificato qui, sfrutta proprio la funzione compare.


  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26
    Oregon ecco il codice semplificato:
    codice:
    #include <stdio.h>
    #include <string>
    using namespace std;
    string stringa1;
    string stringa2;
    
    
    int main(void){
        stringa1="casa";
        stringa2="casa";
        if (stringa1==stringa2){
            printf("Uguali\n");
        }
    }
    minomic avevo già provato == ma durante l'esecuzione si blocca cmq ho provato anche gli altri due modi ma niente da fare.
    Si apre una finestra piena di codice e viene evidenziata questa riga:
    codice:
    return __lhs.compare(__rhs) == 0;
    il messaggio dice EXC_BAD_ACCESS(CODE=1,ADDRESS=0X0).
    Se può servire ma non credo importi sono su xcode con mac os x Yosemite.
    Grazie per la disponibilità

  5. #5
    Il codice che hai postato non può dare un errore del genere in un'implementazione "normale" del C++. Probabilmente hai "semplificato" un po' troppo... Non è che nel codice "vero" hai usato dei puntatori a string (dei quali almeno uno non inizializzato)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    @Depis
    Veramente io l'ho compilato con g++ e funziona... Forse il problema è che hai mischiato un po' di C e C++. Se lo vuoi scrivere "tutto" in C++ allora

    codice:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string stringa1;
    string stringa2;
    
    
    int main(void){
        stringa1="casa";
        stringa2="casa";
        if (stringa1==stringa2){
            cout << "Uguali" << endl;
        }
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    26
    Domani ricontrollerò per sicurezza il codice.
    @minomic lo so che è misto ma non credo dipenda da questo. Il fatto è che sto imparando piano piano e mi viene più facile usare printf per il momento per non confondermi. Grazie ad entrambi per la disponibilità vi farò sapere.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non devi postare codice semplificato ma quello vero che dà l'errore. Mischiare c e c++ non è un problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.