C# parser une equation pour faire un calcul

Fermé
Bob - 3 avril 2008 à 21:28
 Nack - 16 juin 2008 à 10:59
Bonjour,

J'ai un calcul du style 5 + 4 - 1 dans une string et je dois calculer la valeur -> 8

voici ce que j'ai faire, je split tout dans un tableau (ok) mais apres quand je veux faire le calcul, j'ai un message d'erreur (cannot implicitly convert type 'string' to 'double').

Je ne vois pas ce que je dois faire pour corriger cela. Merci

public static double ParseEquation(string equation)
{
string[] arInfo = new string[5];

// define which character is seperating fields
char[] splitter = { ' ' };

arInfo = equation.Split(splitter);

double result = 0.0;

result = Convert.ToDouble(arInfo[0]) + arInfo[1] + Convert.ToDouble(arInfo[2]) + arInfo[3] + Convert.ToDouble(arInfo[4]);

return 0.0;
}
A voir également:

1 réponse

Salut,

L'erreur vient du fait que tu ne peux pas transformer les chaines "+" et "-" pour les utiliser en temps qu'opérateurs de ton équation et retourner le double que tu attends.

A la place tu peux faire quelque chose comme cela:

public double ParseEquation(string equation)
        {
            string[] monEquation = equation.Split("+-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            
            string operateurs = @"(?<Operator>[+|-])";
            System.Text.RegularExpressions.MatchCollection operateursCollection = System.Text.RegularExpressions.Regex.Matches(equation, operateurs, System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace);

            double resultat = Convert.ToDouble(monEquation[0]);
            for (int i = 0; i < monEquation.Length - 1; i++)
            {
                resultat = CalculerOperateur(resultat, Convert.ToDouble(monEquation[i + 1]), operateursCollection[i].Value);
            }
            return resultat;
        }

        private double CalculerOperateur(double nombre1, double nombre2, string op)
        {
            if (op == "-")
            {
                return nombre1 - nombre2;
            }
            else if (op == "+")
            {
                return nombre1 + nombre2;
            }
            else
            {
                // Gérer l'erreur d'opérateur
            }
        }
0