Erreur de comparaison entre un caractère (string) et une case d'un tableau (cons [Résolu]

Signaler
Messages postés
470
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
-
wizard512
Messages postés
470
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
-
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

Messages postés
3805
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 mars 2020
98
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é.
Messages postés
470
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013

A oui effectivement. Merci pour l'aide =)