本文最后更新于:2020年4月11日 下午

解决方案

第一种解决方案是所谓的递归下降解析。
如果仅用一个字符就可以确定当前状态或从现在开始的过渡,则此方法就足够了。
从左到右处理字符串,并在递归分析时对其进行计算。

该实现有点脏,因此我想对其进行适当的审查。

第二个解决方案是
如果仔细观察字符串,操作符号将紧接着紧跟在括号内的位置。
换句话说,它对应于括号字符串[括号问题]。
因此,可以使用堆栈轻松实现。

如果仔细考虑,操作符号为
由于仅存在$+(-(()-()+())-()())$之类的嵌套
(朝相反的方向。走下之后,您只能往上走。向右走之后,您只能往左走。
是一个堆栈,因此使用堆栈可以轻松解决此问题。

主函数$Code$

int main() {
  
     string S;
     cin >> S;
  
     stack<char> ss;
     string ans = "";
  
     for (auto c: S) {
         if (c == '+' || c == '-' || c == '*' || c == '/') {
             ss.push(c);
         } else if (c == ',') {
             char ch = ss.top();
             ans += ch;
         } else {
             ans += c;
             if (c == ')') ss.pop();
         }
     }
  
     cout << ans << endl;
  
     return 0;
 }

本文在 CC BY-NC-ND 4.0( https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh )协议 的前提下,禁止超过文章30%字数的摘录(对于不超过文章30%字数的摘录,要求在醒目位置注明原文作者与原文链接),同时,在未经作者本人手写签名许可的情况下,禁止任何形式的全文转载,禁止发布任何基于本文的再创作。

题解 AT677 【おいらの素数生成式】 上一篇
题解 AT966 【JOI 国の買い物事情 (Shopping in JOI Kingdom)】 下一篇
本博客采用 xCss 的 Valine 评论系统,搭配了 Valine-Admin,垃圾评论将会被过滤。所以在评论的时候,请注意您的语言。如果您的评论被过滤但并非垃圾评论,请发邮件到 luosiweimail@gmail.com 进行申诉。