J'ai pour projet de créer un langage ésotérique à pile, et je suis actuellement sur l'analyseur syntaxique :
#include <iostream>
#include <string>
#include <fstream>
#include <regex>
#include "stack.h"
int main(int argc, char** argv) {
Stack myStack; //définition de la pile
std::regex push { "[0-9]+" }; //regex d'un nombre à empiler
//lecture du fichier ligne par ligne
std::ifstream infile(argv[1]);
std::string line;
while(std::getline(infile, line)) {
if(std::regex_match(line, push)){ //si détection d'une valeur à empiler
myStack.push(/*nombre à empiler*/);
}
}
}
La fonction main reçoit en paramètre le nom du fichier à analyser, qui est lu ligne par ligne, et si un nombre est détecté, il est empilé dans myStack via la fonction membre push(int x).
Par exemple, si une ligne contient : "abcdefg456hijklmnop", le nombre 456 va être empilé.
J'arrive à détecter la présence d'un nombre via une regex, mais je ne sais pas comment le récupérer pour le passer en paramètre à ma fonction.
myStack.push(/*nombre à empiler*/);
Si quelqu'un sait comment faire ce serait très gentil de m'éclairer, merci
Il faut utiliser search pour trouver plutôt que match.
std::regex push{"[0-9]+"};
std::smatch match;
std::string line = "abcdefg456hijklmnop";
if ( std::regex_search( line , match , push ) ) {
std::cout << match[0] << std::endl; // afficher le 1er match
}
× 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.
En recherche d'emploi.