Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C将字符串数相加/相减_C#_String_Linq - Fatal编程技术网

C# C将字符串数相加/相减

C# C将字符串数相加/相减,c#,string,linq,C#,String,Linq,如果给我以下数字字符串,有没有办法使用LINQ查询将这些数字相加/相减 string numbers = "1 + 1, 2 - 1, 3 + 3"; 因此,我将以如下方式结束: 字符串数=2,1,6 您可以使用它来执行评估,而不是编写自己的评估器。或者你可以使用 输出-2,1,6这可能会对您有所帮助 string numbers = "1 + 1,2 - 1,3 + 3"; string output=String.Join(",", numbers.Split(',').Select(x=

如果给我以下数字字符串,有没有办法使用LINQ查询将这些数字相加/相减

string numbers = "1 + 1, 2 - 1, 3 + 3";
因此,我将以如下方式结束:


字符串数=2,1,6

您可以使用它来执行评估,而不是编写自己的评估器。或者你可以使用

输出-2,1,6

这可能会对您有所帮助

string numbers = "1 + 1,2 - 1,3 + 3";
string output=String.Join(",", numbers.Split(',').Select(x=> getSum(x)));
其中,getSum的定义如下:

 public static int getSum(string input)
    {
        try
        {
            int num1, num2;
            string[] param = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            if (!int.TryParse(param[0], out num1)) { return 0; }
            if (!int.TryParse(param[2], out num2)) { return 0; }
            switch (param[1])
            {
                case "+":
                    return num1 + num2;
                case "-":
                    return num1 - num2;
                case "/":
                    return num1 / num2;
                case "*":
                    return num1 * num2;
                default:
                    return 0;
            }
        }
        catch
        {
            return 0;
        }
    }

注意:只有当所有输入都遵循相同的模式时,这才可以正常工作,额外的空格或逗号将导致异常。因为我们处理的是索引。

数据处理部分,您必须使用可以作为linq一部分调用的方法

范例

string processNumber(string numbers)
{
   if (numbers.contains("+"))
    {
        var operands = numbers.Split("+");
        return string.Format("{0},",int.Parse(operands[0].Trim()) + int.Parse(operands[1].Trim()));

    }

    if (numbers.contains("-"))
    {
        var operands = numbers.Split("-");
        return string.Format("{0},",int.Parse(operands[0].Trim()) - int.Parse(operands[1].Trim()));

    }

   return string.Empty;
}
现在您的Linq查询应该如下所示

string numbers = "1 + 1, 2 - 1, 3 + 3";

string results = string.Concat(numbers.Split(",").Select(x=> ProcessNumber(x)));
这应该行得通。 您可以根据需要进行修改

    int sum = 0;
    int sub = 0;
    string numbers = "1 + 1,2 - 1,3 + 3";
    string num="";
    int count = 1;
    string[] words = numbers.Split(',');
    foreach (string word in words)
    {
       if(word.Contains("+"))
       {

        string[] addition=word.Split('+');
        foreach(string value in addition)
        {
            sum += Convert.ToInt32(value);
        }
        num=num+sum+",";
        sum = 0;
       }
        if(word.Contains("-"))
        {
            string[] subtraction = word.Split('-');
            foreach (string value in subtraction)
            {

            if(count==1)
            {
                sub = Convert.ToInt32(value);
                count++;
            }
            else
            {
                sub = sub-Convert.ToInt32(value);
            }
            }
             num=num+sub+",";
             sub = 0;
        }

    }
    Console.WriteLine(num);

首先在逗号上拆分,然后在运算符上拆分,然后您可以使用开关盒执行操作在逗号上拆分始终是第一步,如Renuka所述。之后,使用类似库的方法计算数学表达式。然后将字符串与String.Joinanswer粘在一起。您提供的Joinanswer是正确的,但“HereToLearn”可能想知道一个随时可用的Linq,它可以生成预期的结果。但据我所知,目前我们还没有这样的智能Linq,它可以识别字符串中的运算符并执行生成结果的操作。我不知道这个存在。下面是表达式格式的文档,供其他查看此答案的人使用。
using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        string numbers = "1 + 1, 2 - 1, 3 + 3";
        var newnumber = string.Join(", ",numbers.Split(',')
            .SelectMany(x => x.Trim().Split(' '))
            .Select((x,i) => new {Index = i, Value = x })
            .GroupBy(x => x.Index/3, i => i.Value)
            .Select(x => {
                switch(x.ElementAt(1)){
                    case "+": return int.Parse(x.ElementAt(0)) + int.Parse(x.ElementAt(2));
                    case "-": return int.Parse(x.ElementAt(0)) - int.Parse(x.ElementAt(2));
                    case "/": return int.Parse(x.ElementAt(0)) / int.Parse(x.ElementAt(2));
                    case "*": return int.Parse(x.ElementAt(0)) * int.Parse(x.ElementAt(2));
                    default: return 0;
                }
            }));
        Console.WriteLine(newnumber);
    }
}
    int sum = 0;
    int sub = 0;
    string numbers = "1 + 1,2 - 1,3 + 3";
    string num="";
    int count = 1;
    string[] words = numbers.Split(',');
    foreach (string word in words)
    {
       if(word.Contains("+"))
       {

        string[] addition=word.Split('+');
        foreach(string value in addition)
        {
            sum += Convert.ToInt32(value);
        }
        num=num+sum+",";
        sum = 0;
       }
        if(word.Contains("-"))
        {
            string[] subtraction = word.Split('-');
            foreach (string value in subtraction)
            {

            if(count==1)
            {
                sub = Convert.ToInt32(value);
                count++;
            }
            else
            {
                sub = sub-Convert.ToInt32(value);
            }
            }
             num=num+sub+",";
             sub = 0;
        }

    }
    Console.WriteLine(num);