Zamiana tekstu z dzialaniem na wynik

0

Witam,
zacząłem pisać kalkulator w Windows formie i tu rodzi się moje pytanie, czy jest jakaś funkcja przekształcająca napis na wyrażenie logiczne? Precyzując z "3+3" chciałbym otrzymać 9

0

Hej, sam programuje póki co w Javie ale z tego co widziałem to chyba w podobny sposób można to zrobić w C#. Mógłbyś swój string (3+3) przekształcić na tablicę komendą .split("+"), po czym sparsować elementy tablicy zawierające cyfry i je dodać do siebie. Doczytaj o parsowaniu i .split.

0

Takie dość niestandardowe i niezalecane z uwagi na bezpieczeństwo podejście, ale wrzucam:

using System;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

namespace ConsoleApplication1
{
    class Program
    {
        public static int Execute(string code)
        {
            var full_code = $"using System;public class Program{{public static int Main(){{ return {code}; }}}}";

            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            CompilerResults result = provider.CompileAssemblyFromSource(parameters, full_code);

            if (result.Errors.Count > 0)
            {
                var stb = new StringBuilder();
                foreach (CompilerError err in result.Errors)
                    stb.Append($"Line:{err.Line} Error:{err.ErrorText}");

                throw new Exception($"Code compilation fail. {stb.ToString()}");
            }

            var method = result.CompiledAssembly.GetType("Program").GetMethod("Main");

            return Convert.ToInt32(method.Invoke(null, new object[] { }));
        }


        public static void Main(string[] Args)
        {
            Console.WriteLine(Execute("4-5-76-3+76+484+3"));
            Console.WriteLine(Execute("5*(10/5)"));
        }
    }
}

PS: Na .NET Corze chyba nie zadziała.

3

Odwrotna Notacja Polska

1

@somekind było to dobre w 2012. Teraz są prostsze metody:

https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples

@Radek Bucki Do Twojego zastosowania jest dobre. Jeżeli chcesz jednak czegoś bardziej wymagającego, to takie rzeczy robi się najpierw przekształcając wyrażenie na notację beznawiasową (Odwrotna Notacja Polska), a następnie mając w takiej postaci wyrażenie się wyliczało. Gotowe algorytmy znajdziesz w sieci. Polecam to wyjście dla większej frajdy ;).

0

Pomysł na kalkulator od początku do końca bezsensu . Nie obraź się.

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