C# C将字符串数相加/相减
如果给我以下数字字符串,有没有办法使用LINQ查询将这些数字相加/相减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=
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);