IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Comparer deux strings.


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par d�faut Comparer deux strings.
    Bonjour,

    J'ai des strings de m�me longueur que je veux comparer 2 � 2.
    Et avoir les caract�res qui font qu'elles soient diff�rentes.

    Je les ai d�j� comparer ( je voies les quelles sont diff�rents des autres) mais je ne sais pas comment r�cup�rer les positions ou se trouvent les diff�rences.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exemple ( 4 strings de 20 chaines de caractères).
    string 1 : 01001101001101100101
    string 2 : 11011110110000101000
    string 3 : 11011011010010100000
    string 4 : 00111100101000111001
     
    string1 est différente de string2 à la position 1, 4 , 7 ect..
    Merci d'avance pour une id�e.

  2. #2
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    362
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par d�faut
    Bonjour,

    Citation Envoy� par jamsgoodon Voir le message
    Je les ai d�j� compar�es
    Peux-tu nous donner ton code ?

    Citation Envoy� par jamsgoodon Voir le message
    Merci d'avance pour une id�e.
    En voici une : je te propose d'utiliser des it�rateurs.

    En voici une autre : je te propose de poser des questions de mani�re pr�cise et d�taill�es, en expliquant notamment ce que tu as d�j� fait et ce que tu n'arrives pas � faire, de fa�on � ce que la r�ponse aie un sens.
    Face � un post comme le tien, aujourd'hui, il n'y a qu'une seule r�ponse qui puisse t'aider : la solution compl�te.

    Or si des gens comme moi sont pr�ts et ont envie d'apporter leur contribution � l'apprentissage de gens qui en ont l'envie, ils n'ont en revanche pas du tout besoin (enfin j'esp�re), de refaire les exercices qu'ils ont d�j� fait en classe quand ils �taient � ta place.

    J'esp�re que tu comprendras ce qu'une demande d'aide comme la tienne peut avoir de vexant pour quelqu'un qui passe du temps � essayer d'aider.

    Bonne journ�e

  3. #3
    Membre confirm�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2010
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 80
    Par d�faut
    [EDIT] je rejoins ce que dis mon pr�d�cesseur, mais l� j'ai juste un peu de temps � perdre...

    sous quelle forme veux tu les r�sultats? Tu veux les stocker pour les r�utiliser ensuite, ou juste r�cup�rer les positions une par une, avant de faire un traitement?

    Dans le premier cas, renvoie par exemple une liste d'int initialement vide dans laquelle tu push_back les positions trouv�es.

    Dans le deuxi�me, il n'y a rien de sp�cial � faire non?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int l = s1.length () ;
    int l2 = s2.length () ;
    if (l != l2)
        throw (taclasseexception("Les chaines à comparer ne sont pas égales !")) ;
     
    // premier cas
     
    std::list<int> res ;
    for (int i = 0 ; i < l ; ++i)
    {
        if (s1[i] != s2[i])
            res.push_back(i) ;
    }
     
    // deuxième cas : 
    for (int i = 0 ; i < l ; ++i)
    {
        if (s1[i] != s2[i]) {
            // ton traitement...
        }
    }

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par d�faut
    Bonjour,
    Apr�s quelque jour de tr�ves sur le sujet je reviens sur la question.
    Merci regis pour le bout de code �a marche bien.

    J'ai �crit le r�sultat dans un fichier pour voir voir les diff�rences relev�es entre les sites mais :

    d'une part pour 2 chaines de caract�res compar�es, la premi�re diff�rence n'est pas prise en compte, je ne sait pas pourquoi?

    d'autre part je veux que le premier site soit le site 1 et non le site 0.

    en esp�rant avoir �t� clair!
    Merci d'avance.

    Voici le bout de code dans la fonction o� la comparaison se fait.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
        for( std::map<std::string, std::string>::iterator it1 = SitesDifferentsDonnes.begin(); it1 != SitesDifferentsDonnes.end(); ++it1){ //itterer sur Couple_De_Famille
     
     
               for(std::map<std::string, std::string>::iterator it1compare = SitesDifferentsDonnes.begin(); it1compare != SitesDifferentsDonnes.end(); ++it1compare){ //Itterer sur espece;
     
                int l = it1->second.length () ;
                int l2 = it1compare->second.length () ;
                if (l != l2)
                    throw ("Les chaines à comparer ne sont pas égales !") ;
     
                    std::ostringstream mespositions;
                    for (int i = 1 ; i < l ; ++i)
                    {
     
     
                        std::ostringstream GeneComparees;
     
                        if (it1->first != it1compare->first)
                        GeneComparees << it1->first << "_" << it1compare->first;
     
     
                            if (it1->second[i] != it1compare->second[i]) {
                            mespositions << " " <<i;
                            }
                            SitesDifferents [GeneComparees.str()] = mespositions.str() ;
     
                    }
     
                }
     
     
        }
        return(SitesDifferents);
     
    }

    L'appelle de la fonction se fait dans mon main.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    std::map<string, std::string> SitesDifferents = DifferrenceEntreSeq(fichierOutG);
              std::cout << " La map courante SitesDifferents a " << SitesDifferents.size() << " elements" << std::endl;
     
                    int copt=1;
                    for(map<std::string, std::string>::iterator it1 =  SitesDifferents.begin(); it1!=  SitesDifferents.end(); ++it1){
     
                             FileSitesDifferents  << it1->first<< " ";
                             FileSitesDifferents  << it1->second <<'\n';
     
     
                        }
                        copt++;
     
              cout << "terminer" << endl;

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    61
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par d�faut Probl�me r�solu!!
    Merci j'ai pu r�soudre le probl�me.

    D'une part Il fallait initialiser le "i" du for � 0
    et
    d'autre part ne pas stocker "i" mais plut�t "i+1".

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
        for( std::map<std::string, std::string>::iterator it1 = SitesDifferentsDonnes.begin(); it1 != SitesDifferentsDonnes.end(); ++it1){ //itterer sur Couple_De_Famille
     
     
               for(std::map<std::string, std::string>::iterator it1compare = SitesDifferentsDonnes.begin(); it1compare != SitesDifferentsDonnes.end(); ++it1compare){ //Itterer sur espece;
     
                int l = it1->second.length () ;
                int l2 = it1compare->second.length () ;
                if (l != l2)
                    throw ("Les chaines à comparer ne sont pas égales !") ;
     
                    std::ostringstream mespositions;
                    for (int i = 0 ; i <l; ++i)
                    {
     
     
                        std::ostringstream GeneComparees;
     
                        if (it1->first != it1compare->first)
                        GeneComparees << it1->first << "_" << it1compare->first;
     
     
                            if (it1->second[i] != it1compare->second[i]) {
                            mespositions << " " <<i+1;
                            }
                            SitesDifferents [GeneComparees.str()] = mespositions.str() ;
     
                    }
     
                }
     
     
        }
        return(SitesDifferents);
     
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 20/02/2014, 16h16
  2. comparer deux string
    Par dingua dans le forum D�buter avec Java
    R�ponses: 2
    Dernier message: 06/12/2009, 13h29
  3. [D�butant] Comparer deux strings
    Par madaou dans le forum Pascal
    R�ponses: 6
    Dernier message: 25/12/2008, 21h06
  4. comparer deux chaines ansistrin ou string .
    Par supersoft5 dans le forum C++Builder
    R�ponses: 6
    Dernier message: 24/05/2007, 14h02
  5. comparer deux string
    Par jul54 dans le forum MFC
    R�ponses: 3
    Dernier message: 22/04/2004, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo