【发布时间】:2020-11-19 17:25:54
【问题描述】:
我有这个代码:
string expresie = Console.ReadLine();
char[] separatori = {'+', '-'};
string[] elementeExpresie = expresie.Split(separatori);
int elem0 = int.Parse(elementeExpresie[0]);
int elem1 = int.Parse(elementeExpresie[1]);
int elem2 = int.Parse(elementeExpresie[2]);
/////////////////////////////////////////////////////////////////////////////////////////
int operatie1 = 0;
if (separatori[0] == '+')
{
operatie1 = elem0+elem1;
}
else if (separatori[0] == '-')
{
operatie1 = elem0-elem1;
}
int operatie2 = 0;
if(separatori[1] == '+')
{
operatie2 = operatie1+elem2;
}
else if(separatori[1] == '-')
{
operatie2 = operatie1-elem2;
}
Console.WriteLine(operatie2);
我必须编写一个类似于计算器的程序,用户在控制台中插入一个算术表达式,最后,它必须显示计算结果。代码的第二部分不起作用,因为我需要检查使用了哪个 char[] 元素; “+”或“-”。这实际上是我的问题:有什么方法可以检查使用了哪个 Split() 元素?
例子: string mathExpression = "10 + 11 - 5"
控制台输出:16
PS:这是学校作业,我需要使用.split方法。
【问题讨论】:
-
不,无法判断
string.Split使用了哪个分隔符。如果用户总是输入1 + 2而从不输入1+2,你可以用空格代替吗? -
Split 从返回的字符串中删除用于拆分的分隔符。您无法使用 split 来发现拆分过程中使用了哪个分隔符。
-
你应该在空格上分割(只是不要将任何参数传递给
Split),然后检查每个部分以确定它是数字还是运算符。 -
不要简单地使用
Split,而是使用一组正则表达式来tokenize您的输入。例如,标记最终会变成 ("10", numeric), ("+", operator), ("11", numeric), ("-", operator), ("5", numeric)。然后,一旦你得到一组标记,解析它们到你想要的表达式 -
考虑拆分运算符,一次一个。考虑
10+11-5-2+6+7-4。在+上拆分会得到10、11-5-2、6、7-4。然后遍历结果以查看字符串中是否有剩余的运算符。如果有,则对其进行拆分(使11-5-2变为11、5和2)。这是解析该行的一种非常复杂的方法
标签: c# string split calculator