Как разделить текст на части, с проверкой частей на правильность написания

Есть задача, в которой пользователь вводит полином, программа должна его высчитать.

static void Main(string[] args)
{
    string testPolinom = "21*5^5+52*5^4-5^3+6*5^2-11*5^1+3*5^0";
    Console.WriteLine(RationalExpression.Polynomial(x, a));            
}

public static double Polynomial(double x, double[] a)
{
    // x = 5
    // a = {21, 52, -5, 6, -11};
    var P = 0.0;
    var n = a.Length;
    for (int i = 0; i < n; i++)
    {
        P = P * x + a[i];
    }
    return P;
}

Проблема в том, что когда я начал писать метод разделения строки, я столкнулся с тем, что не понимаю как проверять правильность написанного уравнения.

Шаблон уравнения


Ответы (1 шт):

Автор решения: aepot

Задача настолько странная, что достойна решения в лоб.

Например регуляркой.

string testPolinom = "21*5^5+52*5^4-5^3+6*5^2-11*5^1+3*5^0";
var matches = Regex.Matches(testPolinom, @"([+|-]?\d*)\*?(\d+)\^(\d+)");
double x = double.Parse(matches[0].Groups[2].Value);
double[] a = matches
    .Select(m => m.Groups.Cast<Group>().Select(g => g.Value).Skip(1).First())
    .Select(x => x == "-" ? -1.0 : x == "+" ? 1.0 : double.Parse(x))
    .ToArray();
Console.WriteLine(Polynomial(x, a));

Вывод в консоль

98098
→ Ссылка