Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C++] Erreur de comparaison

essai du logiciel de compression

Sujet résolu
    15 juin 2008 à 17:26:02

    Bonjour,

    J'ai un problème avec un petit logiciel de compression : :-°
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    void compression(string phrase);
    
    int main()
    {
        string mot="CCCCCCBBBCCU333ZZZZ@YYYYYYYYYYYYY";
    
        cout << "Logiciel de compression" << endl << endl;
    
        cout << "Avant : " << mot << endl;
    
        compression(mot);
    
        return EXIT_SUCCESS;
    }
    
    void compression(string phrase)
    {
        string copie="";
        int len = phrase.size();
        int i; // pour compter les boublons
        char i2[33]; // récupére int i en chaine
    
        for(int c=0;c<len;c++)
        {
            i=1;
    
            if ( phrase[c] == "@" ) { copie+="@"; } // cas particulier où il y a le flag
    
            else if (phrase[c]==phrase[c+1] and phrase[c]==phrase[c+2])
            {
                while( phrase[c] == phrase[c+1] ) // on avance dans la chaine et on regarde les boublons
                   { i++; c++; }
    
                copie += itoa(i,i2,10);
                copie += "@"; // le flag
            }
    
            copie += phrase[c];
            copie += " ";
        }
    
        cout << endl << copie << endl;
    }
    


    Mais j'ai une erreur et je n'arrive pas à la régler :
    error: ISO C++ forbids comparison between pointer and integer


    Merci d'avance...
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2008 à 17:37:52

      Quelle ligne ?
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        15 juin 2008 à 17:38:49

        phrase[c] est un caractère, donc à comparer à '@' et non "@", ce dernier étant une chaîne.
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2008 à 17:39:36

          ligne 34 :

          if ( phrase[c] == "@" ) { copie+="@"; cout << "Ok" << endl; }
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2008 à 17:40:26

            Pff... trop fort ce Laurent. Il doit avoir un compilateur intégré !
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            Anonyme
              15 juin 2008 à 17:41:47

              Tu lis............
              • Partager sur Facebook
              • Partager sur Twitter
                15 juin 2008 à 17:42:48

                if ( phrase[c] == '@' ) { copie+="@"; } // cas particulier où il y a le flag
                • Partager sur Facebook
                • Partager sur Twitter
                  15 juin 2008 à 17:43:54

                  Ah! j'avais pas vu la subtile différence.


                  Merci!!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juin 2008 à 18:32:36

                    deuxième petite subtilité :
                    string.h n'existe pas (si tu vas voir dans les fichiers de code::blocks par exemple le fichier est juste nommé : string)
                    Donc il faut virer ce *.h.
                    Bonne chance ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    :)
                      15 juin 2008 à 18:35:57

                      <string.h> existe, mais c'est un fichier de la bibliothèque standard du C. Sinon c'est effectivement <string> qui définit la classe du même nom.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 juin 2008 à 18:43:18

                        Citation : Laurent Gomila

                        <string.h> existe, mais c'est un fichier de la bibliothèque standard du C. Sinon c'est effectivement <string> qui définit la classe du même nom.



                        j'ai oublié de spécifier "Dans le dossier c++, ..." :lol:
                        • Partager sur Facebook
                        • Partager sur Twitter
                        :)

                        [C++] Erreur de comparaison

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown