Я новичок в C++, и меня попросили создать решатель функции полинома второй степени. Чтобы сделать это, я в первую очередь необходимо проанализировать уравнение и уменьшить его, чтобы показать его в сокращенном виде, а именно:std :: regex для определения коэффициента полиномиального уравнения
8 * X^0 - 6 * X^1 + 5.6 * X^2 = 3 * X^0
становится 5 * X^0 - 6 * X^1 + 5.6 * X^2 = 0
После нескольких часов, глядя на различные синтаксисах, я обнаружил, что следующее регулярное выражение [0-9]+(?=.?[*](?=.?(?=(X\^0))))
идентифицировать 8
и 3
как коэффициенты (по-прежнему необходимо обрабатывать отрицательный знак tho).
Моя проблема заключается в следующем коде с библиотекой <regex>
, кажется, не дает мне 8
и 3
, но все уравнение, интересно, почему? Поскольку код работает в regex online tester как full match 1
и full match 2
. Интересно, если это не потому, что у меня есть группы, которые Мессинг немного ..
#include <iostream>
#include <regex>
using namespace std;
int main()
{
string var = "8 * X^0 - 6 * X^1 + 5.6 * X^2 = 3 * X^0";
regex wsaq_re("[-](?=.?[0-9](?=.?[*](?=.?(?=(X^0)))))");
copy(sregex_token_iterator(var.begin(), var.end(), wsaq_re, -1),
sregex_token_iterator(),
ostream_iterator<string>(cout, "\n"));
return 0;
}
Compiler? std :: regex, как известно, ошибочен в некоторых версиях gcc, вы можете использовать один форматированный форматирование. – Slava
Кажется, что это гораздо проще решить с помощью рукописного анализатора. –
@ pete-becker ok Я нашел это [ссылка] http://stackoverflow.com/questions/1806074/c-extract-polynomial-coefficients?rq=1 [ссылка], которая может быть полезна – ziKmouT