首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在中缀到后缀转换的输出中,用未知字符代替运算符

是指在将中缀表达式转换为后缀表达式的过程中,如果遇到运算符,但是不知道该运算符具体是什么,就用一个未知字符来代替。

中缀表达式是我们常见的数学表达式,例如:3 + 4 2 - 1。而后缀表达式是一种将运算符放在操作数之后的表达式,例如:3 4 2 + 1 -。

中缀到后缀的转换可以通过使用栈来实现。具体步骤如下:

  1. 创建一个空栈和一个空列表,用于存储后缀表达式。
  2. 从左到右遍历中缀表达式的每个字符。
  3. 如果遇到操作数(数字),直接将其添加到后缀表达式列表中。
  4. 如果遇到左括号,将其压入栈中。
  5. 如果遇到右括号,将栈中的运算符依次弹出并添加到后缀表达式列表中,直到遇到左括号为止。注意,左括号不会被添加到后缀表达式列表中。
  6. 如果遇到运算符,将其与栈顶的运算符进行比较:
    • 如果栈为空,或者栈顶为左括号,或者栈顶运算符的优先级低于当前运算符,则将当前运算符压入栈中。
    • 否则,将栈顶的运算符弹出并添加到后缀表达式列表中,然后继续比较当前运算符与新的栈顶运算符。
  7. 当遍历完中缀表达式后,将栈中剩余的运算符依次弹出并添加到后缀表达式列表中。
  8. 后缀表达式列表即为转换后的后缀表达式。

在这个过程中,如果遇到无法识别的运算符,可以用一个未知字符(例如"?")来代替。这样在后缀表达式中,就可以知道原本的中缀表达式中存在未知的运算符。

关于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方网站的相关文档和产品介绍页面,例如:

相关搜索:输出存储在多维数组中的查询结果(获取数组到字符串的转换)在字符串到列表的转换中挣扎用VBA在Access中实现RTF嵌入OLE到HTML的转换在java中如何将聚合运算符的输出存储为字符串?用MSVC在模板化函数中调用自定义转换运算符的正确方法在laravel 5.6中命名路由组中数组到字符串的转换在Python 3中将Map函数的输出转换为字符串输入XML中的中文字符会导致XSLT转换在输出XML中显示无效的字符引用在C中,从整型数组到字符数组的转换有什么不同?日期到字符串的转换在JavaScript中显示不正确的格式用ruby编写条件语句,然后在HAML标记中使用字符串插值将输出转换为字符串的正确格式在Java中创建类的对象并将其转换为字符串数据类型时的输出在Golang中,从int64到字符串然后切片的转换不起作用如何纠正异常:在从字符串到OffsetDateTime的转换中,无法在索引0处解析?Python中的未知字符串格式pd.to_datetime。在尝试将此格式转换为datetime格式时遇到问题Python:在区分列表的最后一项时,如何在列表到字符串的转换中添加特定字符?数据到字符串的UTF-8编码格式转换在PKAddPaymentPassViewControllerDelegate的generateRequestWithCertificateChain方法中返回nil在R中从字符到十进制数字的类型转换问题(来自web抓取的数据)解析旧文件时,在脚本文件中迭代字符串到浮点数的转换在C#中通过ArrayPool重用内存从字符串到字节数组的转换?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 中缀表达式转换为后缀表达式(逆波兰表达式)并对其求值

    中缀表达式转后缀表达式思路: 1.初始化一个运算符栈s1和存储中间结果的List集合s2; 2.从左至右扫描中缀表达式(这里为了方便把中缀表达式字符串依次存放到数组中); 3.遇到操作数时,将其加到s2; 4.遇到运算符时,比较其与s1栈顶运算符的优先级: 4.1.若s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈 4.2.若优先级比栈顶运算符优先级高,也将运算符压入s1; 4.3.否则,将s1栈顶的运算符弹出并加到s2中,再次回到4.1与s1中新的栈顶运算符相比较 5.遇到括号时: 5.1.若是左括号“(”,则直接压入s1; 5.2.若是右括号“)”,则依次弹出s1栈顶运算符并加入s2,直到遇左括号为止,此时将这一对括号丢弃; 6.重复2-5,直到表达式最右边 7.将s1中剩余的运算符依次弹出并加入到s2 8.依次输出s2中的元素,结果即为中缀表达式对应的后缀表达式。

    03

    栈在表达式求值中的应用——逆波兰表达式求值+中缀表达式转后缀表达式

    我们正常写的表达式,就比如题目中的这个:(2 + 1) * 3 这种写法叫做中缀算术表达式,即运算符写在操作数的中间,但是这种写法计算机是不能直接计算的,因为涉及运算符优先级的问题,比如1+2*3,应该先算*。 所以呢,这里就需要我们做一件事情,就是把它变成后缀表达式,其实就是根据优先级对表达式中的运算符排一个序,并且放到对应的操作数后面。 就比如题目中给的这个示例:((2 + 1) * 3)这个表达式对应的后缀表达式就是["2","1","+","3","*"](题中是把它放到一个字符串数组中了)。 即1和2先进行后面的+,得到的结果再和3进行后面的*,得到最终结果。这样就直接从前往后算,不用考虑优先级的问题了。

    01
    领券