有没有可能的方法来检查使用了哪个 Split() 元素?
Is there any possible way to check which Split() element is used?
我有这个代码:
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
方法
用填充的运算符替换您的运算符,并在填充字符上拆分。
例如
var pad = "[=10=]";
var input = "1+2";
var operators = new string[] { "+", "-" };
foreach (var operator in operators)
{
input = input.Replace(operator, pad + operator + pad);
}
var tokens = input.Split( new string[] { pad } , StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(tokens[0]); // Outputs "1"
Console.WriteLine(tokens[1]); // Outputs "+"
Console.WriteLine(tokens[2]); // Outputs "2"
一个想法是按空格拆分,这样您就有了操作数和运算符的集合。然后你可以做如下的事情:
string expression = Console.ReadLine();
string[] expParts = expression.Split();
int operand1 = int.Parse(expParts[0]);
string operator1 = expParts[1];
int operand2 = int.Parse(expParts[2]);
string operator2 = expParts[3];
int operand3 = int.Parse(expParts[4]);
int result = operand1;
if (operator1 == "+")
{
result += operand2;
}
else if (operator1 == "-")
{
result -= operand2;
}
if (operator2 == "+")
{
result += operand3;
}
else if (operator2 == "-")
{
result -= operand3;
}
Console.WriteLine(result);
这里的缺点是它需要精确的字符串格式 ("10 + 11 - 5"
)。如果有人输入了"10+11-5"
,就不行了。
我有这个代码:
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
方法
用填充的运算符替换您的运算符,并在填充字符上拆分。
例如
var pad = "[=10=]";
var input = "1+2";
var operators = new string[] { "+", "-" };
foreach (var operator in operators)
{
input = input.Replace(operator, pad + operator + pad);
}
var tokens = input.Split( new string[] { pad } , StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(tokens[0]); // Outputs "1"
Console.WriteLine(tokens[1]); // Outputs "+"
Console.WriteLine(tokens[2]); // Outputs "2"
一个想法是按空格拆分,这样您就有了操作数和运算符的集合。然后你可以做如下的事情:
string expression = Console.ReadLine();
string[] expParts = expression.Split();
int operand1 = int.Parse(expParts[0]);
string operator1 = expParts[1];
int operand2 = int.Parse(expParts[2]);
string operator2 = expParts[3];
int operand3 = int.Parse(expParts[4]);
int result = operand1;
if (operator1 == "+")
{
result += operand2;
}
else if (operator1 == "-")
{
result -= operand2;
}
if (operator2 == "+")
{
result += operand3;
}
else if (operator2 == "-")
{
result -= operand3;
}
Console.WriteLine(result);
这里的缺点是它需要精确的字符串格式 ("10 + 11 - 5"
)。如果有人输入了"10+11-5"
,就不行了。