J'écris un petit programme en ligne de commande qui demande à l'utilisateur des polynômes sous la forme ax^2 + bx^1 + cx^0. Je vais analyser les données plus tard mais pour l'instant j'essaie juste de voir si je peux faire correspondre le polynôme avec l'expression régulière (\+|-|^)(\d*)x\^([0-9*]*)
Mon problème est, il ne correspond pas à plusieurs termes dans le polynôme saisi par l'utilisateur sauf si je change à ((\+|-|^)(\d*)x\^([0-9*]*))*
(la différence est que l'expression entière est groupée et a un astérisque à la fin). La première expression fonctionne si je tape quelque chose comme "4x^2
" mais pas "4x^2+3x^1+2x^0
", car elle ne vérifie pas plusieurs fois.Pourquoi Boost.Regex ne trouve-t-il pas plusieurs correspondances dans une chaîne?
Ma question est, pourquoi ne pas Boost.Regex's regex_match()
trouver plusieurs correspondances au sein de la même chaîne? Cela se fait dans l'éditeur d'expressions régulières que j'ai utilisé (Expresso) mais pas dans le code C++ actuel. Est-ce censé être comme ça? Faites-moi savoir si quelque chose n'a pas de sens et je vais essayer de clarifier. Merci pour l'aide.
Edit1: Voici mon code (je suis le tutoriel ici: http://onlamp.com/pub/a/onlamp/2006/04/06/boostregex.html?page=3)
int main()
{
string polynomial;
cmatch matches; // matches
regex re("((\\+|-|^)(\\d*)x\\^([0-9*]*))*");
cout << "Please enter your polynomials in the form ax^2+bx^1+cx^0." << endl;
cout << "Polynomial:";
getline(cin, polynomial);
if(regex_match(polynomial.c_str(), matches, re))
{
for(int i = 0; i < matches.size(); i++)
{
string match(matches[i].first, matches[i].second);
cout << "\tmatches[" << i << "] = " << match << endl;
}
}
system("PAUSE");
return 0;
}
J'ai essayé de modifier l'expression régulière, mais il n'a pas travaillé . Cela va correspondre, mais la seule information dans le tableau "matches" est la substance de la dernière sous-expression.Par exemple, si je saisis "4x^2 + 3x^1", ma sortie lit: correspond à [0] = 4x^2 + 3x^1 correspond à [1] = + 3x^1 correspond à [2] = + correspond à [3 ] = 3 correspondances [4] = 1 J'obtiens seulement le dernier terme du polynôme; Je dois être capable d'analyser le tout. –
@Zeebo: peut-être que la version que j'ai éditée dans la réponse sera utile. –
Désolé, j'aurais dû être plus clair. J'ai seulement besoin des coefficients et des exposants. J'essaie d'écrire un programme pour effectuer une division synthétique, donc tout ce que j'ai besoin de savoir sont les coefficients (et s'ils sont positifs ou négatifs), combien de termes il y a, et les exposants (parce que 0x^n doit être inséré si un terme manque, par exemple 4x^4 + 7x^2 doit être 4x^2 + 0x^3 + 7x^2.) –