Sprawdzanie czy wprowadzony ciąg znaków to równanie

0

Hej wszystkich,

Chciałem się trochę pobawić z równaniami w C#. Postanowiłem, że na samym początku sprawdzę czy użytkownik podał równanie x + 3 = 5 czy coś innego al;sfdsajlkjf.
Stworzyłem do tego tablicę, która zawiera "znaki matematyczne"(myślę, że to jest niezłe podejście):

private static readonly char[] mathSings = { '+', '-', '*', '/', ':', '=' };

Metodą klasy String sprawdzam czy to jest równanie czy nie. I tutaj pytanie jak najlepiej to sprawdzić, bo

if(input.Contains(mathSings[0]) || input.Contains...)

nie jest dobrym rozwiązałem; chciało by się jakoś przeiterować tą tablicę, ale od dłuższego czasu nie mam pomysłu jak.

Macie jakieś ciekawe pomysły do tego? Albo też jakieś inne znacznie lepsze rozwiązanie niż to?

z góry dzięki za pomoc
pozdrawiam

0

Aby mieć 100% pewności, powinieneś równanie sparsować - jeśli się uda, no to siłą rzeczy jest prawidłowe ;-)
Szukaj informacji pod kątem c# math parser.

0

np. tak Link do arta na 4p

0

A gdyby to jakoś ugryźć za pomocą Roslyn?

using Microsoft.CodeAnalysis.CSharp.Scripting;

static void Main()
{
    var Equation = "2*x+34";
    Console.WriteLine($"Chyba jest równaniem: {IsExpressionable(Equation)}");
}

static bool IsExpressionable(string Equation)
{
    var Expression = $"int x = 5; return {Equation};";
    Task<int> Evaluate;
    try
    {
        Evaluate = CSharpScript.EvaluateAsync<int>(Expression);
    }
    catch
    {
        return false;
    }
    Console.WriteLine(Evaluate.Result);
    return Evaluate.IsCompletedSuccessfully;
}

44
Chyba jest równaniem: True

A dla:
var Equation = "2*x+3;4";

Chyba jest równaniem: False

Dla wielu zmiennych po prostu zmieniamy:

var Equation = "2*x+3 + 4*y";

oraz

var Expression = $"int x = 5; int y = 2; return {Equation};";

21
Chyba jest równaniem: True

:D

0

A ja nie mam pomysłu jak zbudować rakietę kosmiczną - taki żart

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0