Erreur de comparaison entre un caractère (string) et une case d'un tableau (cons

Résolu
wizard512 Messages postés 459 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 11 mai 2013 - 29 mai 2009 à 22:14
wizard512 Messages postés 459 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 11 mai 2013 - 29 mai 2009 à 22:44
Bonsoir,



J'obtient une erreur lors de la comparaison entre un caractère et une case d'un tableau. Voici des segments du code source :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    const char* tabs[ ] =
    {
     "A", "B", "C", "D", "E", "F",
               [..]
     "A", "B", "C", "D", "E", "F"
    } ;
      [..]
    string Msg ;  
    int a = 5  ;
      [..]
    cout << "Message : " ;
    cin  >> Msg ;   
      [..]
    for( int b = 0 ; b < 55 ; ++b )
    {
      cout<< ((char*)alphabet[b]) <<".."<< ((char)Msg[a]) << endl;
               
      if( (char*)alphabet[ b ] == (char)Msg[ a ] )
      {
          //Msg[ a ] = ((char)substitu[ b ]) ;
          cout << b << endl ;    
      }
    } ;

     cout << Msg << endl ;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Et voici l'erreur obtenue par devcpp :
 ISO C++ forbids comparison between pointer and integer

Une petite idée?
Cordialement.

2 réponses

cptpingu Messages postés 3834 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 20 octobre 2021 125
29 mai 2009 à 22:32
C'est normal. Tu compares une chaîne de caractère avec un caractère.
Exemple: "A" est une chaine de caractère, et 'A' est un caractère.

const char* s = {'A', 'B', 'C', 'D', '\0'};
est équivalent à:
const char* s = "ABCD";
C'est de là que vient ton erreur, car ton "const char* tabs[]" est un tableau contenant des chaînes de caractères dans chacune des ses cases.

Plusieurs solutions:
* Utilise '' pour un caractère et non "".
    const char* tabs =
    {
     'A', 'B', 'C', 'D', 'E', 'F',
               [..]
     'A', 'B', 'C', 'D', 'E', 'F'
    } ;

OU

* Déréférence le pointeur lors de la comparaison (moche):
 if (*(alphabet[b]) == Msg[a])

Enfin, vu que tu es en C++, oublie les const char* au profit des std::string bien mieux adapté.
3
wizard512 Messages postés 459 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 11 mai 2013 2
29 mai 2009 à 22:44
A oui effectivement. Merci pour l'aide =) 
0