0

5 つの数字を含むタイプ decimal のリストがあります: {10, 9, 100,73,3457}. これらの数値の間に文字列型の 4 つの演算子の別のリストがあります:*乗算-減算/除算+加算。

文字列の結果を取得するにはどうすればよいですか? 演算子の優先順位を課す方法がわかりません。

10 * 9 - 100 / 73 + 3457 = ???

これが私が持っているコードです。私は完全に間違った方法で問題に取り組んでいます。どうすればよいですか?

static List<decimal> numbers = new List<decimal>();
static List<string> operators = new List<string>();

foreach (decimal number in numbers)
{
    foreach (string operatorz in operators)
    {
        resultnumber = 
    }
}
4

3 に答える 3

4

私はあなたが望むものを手に入れたことを願っています. 二項演算子をリストしたので、演算子ごとに 2 つのオペランドが必要だと思います。結果の行数は =numbers.Length * numbers.Length * operators.Length

void Main()
{
   var numbers = new[] { 10, 9, 100, 73, 3457 };
   var operators = new [] { "*", "+", "/", "-" };


    var r = from n1 in numbers
            from n2 in numbers
            from op in operators
            select string.Format("{0} {1} {2} = {3}",
                                  n1, op, n2,   Perform(n1, op, n2));

}

public int Perform(int val1, string @operator, int val2)
{
    //main core if your question, consider to extract operators to outer level
    var operators = new Dictionary<string, Func<int, int, int>>
    {
        {"+", (v1, v2) => v1 + v2},
        {"/", (v1, v2) => v1 / v2},
        {"*", (v1, v2) => v1 * v2},
        {"-", (v1, v2) => v1 - v2},
    };

    return operators[@operator](val1, val2);
}

結果は

10 * 10 = 100 
10 + 10 = 20 
10 / 10 = 1 
10 - 10 = 0 
10 * 9 = 90 
....
于 2013-03-22T13:16:45.150 に答える
1

あなたが何を望んでいたかは完全には明らかではありません。ただし、これらの演算子が数値の間にあると仮定し、ネイティブの演算子の優先順位に解決します。そのための簡単な方法は、スクリプトを作成することです。演算子の優先順位はネイティブになります。

スクリプティング

private static void Main(string[] args)
{
    var numbers = new[]{ 10, 9, 100, 73, 3457 };
    var ops = new[] { "*","-","/","+" };

    if (numbers.Length != ops.Length + 1)
        throw new Exception("TODO");

    string statement = numbers[0].ToString();

    for (int i = 0; i < ops.Length; i++)
    {
        statement += string.Format(" {0} {1}", ops[i], numbers[i + 1]);
    }

    Console.WriteLine("Statement: " + statement);

    var method = String.Format(@"int Product() {{ return {0}; }} ", statement);

    Console.WriteLine("Method: " + method);


    var Product = CSScript.Evaluator.CreateDelegate(method);
    int result = (int)Product();

    Console.WriteLine(result);
}

結果:

Statement: 10 * 9 - 100 / 73 + 3457
Method: int Product() { return 10 * 9 - 100 / 73 + 3457; }
3546
Press any key to continue . . .
于 2013-03-22T13:25:57.720 に答える
-1

http://msdn.microsoft.com/fr-fr/library/s53ehcz3(v=VS.80).aspx

独自のクラスを使用して計算を処理できます

于 2013-03-22T13:17:30.887 に答える