2017-05-25 1 views
-1

travaillant sur un projet C++, j'ai besoin d'itérer sur une chaîne (ou char * en fonction de la solution que vous pourriez me fournir!). Donc, fondamentalement, je fais ceci:En utilisant regex_match() sur itérateur avec une chaîne en C++

void Pile::evalExpress(char* expchar){ 
    string express = expchar 
    regex number {"[+-*/]"}; 

    for(string::iterator it = express.begin(); it!=express.end(); ++it){ 
     if(regex_match(*it,number)){ 
      cout<<*it<<endl; 
     } 
    } 
} 

char expchar[]="234*+"; 
Pile calcTest; 
calcTest.evalExpress(expchar); 

l'itérateur fonctionne bien (je peux mettre un Cout < < * il < < « endl au-dessus de l'instruction if et je reçois une sortie correcte)

puis lorsque je tente de compiler:

error: no matching function for call to 'regex_match(char&, std::__cxx11::regex&)' 
    if(regex_match(*it,number)){ 
          ^

je ne sais pas pourquoi cela se passe, j'ai essayé de ne pas utiliser iterator et itérer directement sur le expchar [i] mais j'ai la même erreur avec regex_match(). ..

Cordialement

Vincent

Répondre

2

Lire le message d'erreur! Il vous indique que vous essayez de passer un seul char à regex_match, ce qui n'est pas possible car il nécessite une chaîne (ou une autre séquence de caractères) pas un seul caractère. Vous pouvez faire if (std::regex_match(it, it+1, number)) à la place. Cela indique de rechercher la séquence de caractères de it à it+1 (c'est-à-dire une séquence de longueur 1).

Vous pouvez également éviter de créer un string et itérer sur le char* directement

void Pile::evalExpress(const char* expchar) { 
    std::regex number {"[+-*/]"}; 

    for (const char* p = expchar; *p != '\0'; ++p) { 
     if (regex_match(p, p+1, number)) { 
      cout<<*p<<endl; 
     } 
    } 
} 
+0

Bonjour, merci pour votre réponse. J'ai été un peu troublé par le & dans le 'char &' ... Je pense que même s'il y a un personnage c'est toujours un char * mais pas du tout. – Gozu09

+0

Cela signifie que c'est une référence à un 'char'. Obtenez un [bon livre sur C++] (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –