gpt4 book ai didi

c# - 后缀计算器

转载 作者:行者123 更新时间:2023-11-30 12:48:40 25 4
gpt4 key购买 nike

用 C sharp 制作一个控制台应用程序,以利用堆栈解决后缀表示法中的表达式,例如:

表达:43+2*答案:14

到目前为止我做了什么:

using System;
using System.Collections;
using System.Linq;
using System.Text;

namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
string input = "23+";
int counter = 0;
Stack values = new Stack();


while (counter < input.Length)
{
int temp1,
temp2,
answer;

char x = char.Parse(input.Substring(counter, 1));

if ( );
else if (x == '+')
{
temp1 = (int)values.Pop();
temp2 = (int)values.Pop();

values.Push(answer = temp1 + temp2);
}
else if (x == '-')
{
temp1 = (int)values.Pop();
temp2 = (int)values.Pop();

values.Push(answer = temp1 - temp2);
}
else if (x == '*')
{
temp1 = (int)values.Pop();
temp2 = (int)values.Pop();

values.Push(answer = temp1 / temp2);
}
else if (x == '/')
{
temp1 = (int)values.Pop();
temp2 = (int)values.Pop();

values.Push(answer = temp1 * temp2);
}

counter++;

}
Console.WriteLine(values.Pop());
}
}

对于 if 语句,我可以使用什么作为条件来检查 x 是否为操作数?

最佳答案

您的示例输入是 2、3、+(等于 5)还是 23、+(无效输入)?我假设是前者。那么,你会如何写出两位数呢?您当前的方法似乎不支持这一点。我认为你不应该逐个字符地解析这个字符,而是首先将它拆分成单独的组件,也许使用识别数字和标点符号的正则表达式。举个简单的例子:Regex.Matches("10 3+", @"(\d+|[\+\-\*/ ])")拆分为 10 , , 3 , 和 + ,可以使用您已有的代码很容易地对其进行解析和理解(空格应该被忽略;它们只是我选择用来分隔数字的标点符号,以便您可以拥有多位数)和 int.TryParse (或 double ,这需要更复杂的正则表达式模式,请参阅 Matching Floating Point Numbers 了解该模式)以查看输入是否为数字。

你应该使用 Stack<int> 避免强制转换并使其在编译时安全。

关于c# - 后缀计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13521724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com