Avatar billede fila Nybegynder
03. januar 2006 - 11:09 Der er 9 kommentarer

Hvordan bruger man en streng til et regnestykke

Hej jeg vil gerne vide hvordan man eksempelvis udskriver en string i følgende afsnit.

int tal1 = 5;
int tal2 = 10;
int sum;
string check = "*";
sum=tal1 check tal2;
Meningen er så at check bliver udskrevet og skal fungere som gange-enhed
Avatar billede arne_v Ekspert
03. januar 2006 - 13:52 #1
Det er normalt ret svært.

Men lige netop .NET kan noget smart der fordi .NET inkluderer JScript.NET !

using System;
using Microsoft.JScript;
using Microsoft.JScript.Vsa;

public class ExprCalc
{
    private static VsaEngine eng = VsaEngine.CreateEngine();
    public static double Evaluate(string s)
    {
        return Double.Parse(Eval.JScriptEvaluate(s, eng).ToString());
    }
}

class MainClass
{
    public static void Main(string[] args)
    {
        int tal1 = 5;
        int tal2 = 10;
        int sum;
        string check = "*";
        sum = (int)ExprCalc.Evaluate(tal1 + check + tal2);
        Console.WriteLine(sum);
    }
}
Avatar billede fila Nybegynder
03. januar 2006 - 14:00 #2
Har du eksempler på det ovenstående stykke uden brug af jscript
Avatar billede arne_v Ekspert
03. januar 2006 - 14:21 #3
Ikke i C#.

Hvis det skal laves ordentligt (med support for parenteser og operator precdens)
så tager det vel en 500-1000 linier.

SÅ er der høker løsningerne med lidt if/switch sætninger.
Avatar billede fila Nybegynder
03. januar 2006 - 15:08 #4
int tal1 = 1;
int tal2 = 1;
string check = "*";
int sum;
           
sum=tal1 Convert.ToChar(check) tal2;

Sådan har jeg gjort pt. Men mangler at skrive noget ved tal1 og tal2 har prøvet med +'er men det virkede ikke så fik jeg et tal der hed 43
Avatar billede arne_v Ekspert
03. januar 2006 - 15:11 #5
fordi man kan ikke den slags
Avatar billede fila Nybegynder
03. januar 2006 - 15:19 #6
oki
Avatar billede arne_v Ekspert
03. januar 2006 - 15:23 #7
Man kan simpelthen ikke den slags med et compilet sprog.

Men du kan da prøve at lege lidt med if/switch sætninger.
Avatar billede tuxic Nybegynder
07. januar 2006 - 16:23 #8
Hvis det skal laves ordentligt skal der kodes en parser. Fx en recursive-decent i hånden (langsom, men ikke så vanskelig. Fylder næppe 500 linier, snarere et par hundrede). Eller få lavet genereret en bottom-up parser (goldparser hvad har vi).

Man kan lave voldsomt skumle hacks i .NET. Du kan tage strengen, lave den om til et C# program (fx ved at lave en klasse, med en statisk metode udenom regneudtrykket) oversætte og loade det dynamisk, hvorefter du kalder metoden på og får regnestykket.

Men altså, det er skummelt (hvis en bruger kan angive regneudtrykket, kan en bruger pludseligt injecte kode i din app. Man kan ikke unloade assemblies. Så skal du loader i et andet AppDomain og unloade det når du er færdig etc)
Avatar billede fila Nybegynder
30. januar 2006 - 13:50 #9
Har lavet en recursiv funktion i C som kunne det uden problemer
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester