stack计算表达式的值

9.52 使用stack对象处理带圆括号的表达式。遇到左圆括号时,将其标记下来。当你在一个左括号之后遇到右圆括号时,弹出stack对象中这两边括号之间的元素,直到遇到左括号,将左括号也一起弹出栈。 接着在stack对象中压入一个值,用以表明这个用一对圆括号括起来的表达式已经被替换。

程序如下:

#include<iostream>
#include<stack>
#include<string>
using namespace std;

int main()
{
    stack<char> sexp;        //处理表达式的stack对象
    string exp;                //存储表达式的string对象

    //读入表达式
    cout<<"Enter a expression:"<<endl;
    cin>>exp;

    //处理表达式
    string::iterator iter=exp.begin();    //初始迭代器初始位置
    while(iter!=exp.end())
    {
        if(*iter!=‘)‘)  //读到的字符不是右圆括号
            sexp.push(*iter);   //标记字符
        else{
            //读到的是右圆括号,弹出元素直到栈顶为左圆括号或栈为空
            while(sexp.top()!=‘(‘&&!sexp.empty())
                sexp.pop();
            if(sexp.empty())        //栈为空
            {
                cout<<"parentheses are not matched"<<endl;
                return -1;
            }
            else
            {            //栈顶为左圆括号
                sexp.pop();            //弹出左圆括号
                sexp.push(‘@‘);        //表明圆括号的表达式已经被替换
            }
        }
        ++iter;
    }
    if(iter==exp.end())
        cout<<"matched"<<endl;
    return 0;
}

运行结果如下:

stack计算表达式的值,布布扣,bubuko.com

时间: 2024-10-08 06:33:02

stack计算表达式的值的相关文章

C++与数据结构 -- stack实现表达式求值[注释版]

有好多朋友评论以前的那篇博文说:代码中间没有注释.由于课程一直比较紧张,所以答应的注释直到今天才写, 发表出来,与大家共享! #include <map> #include <stack> #include <string> #include <iostream> #include <fstream> using namespace std; //为+,-,*,/运算符 设定优先级 map<char,int> priority; vo

由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值

异常: 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值 原因: 如果使用 Response.End.Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常.您可以使用 try-catch 语句捕获此异常.Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件.不执行 Response.End 后面的代码行.此问题出现在

1,由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。

ylbtech-Error-WebForm: 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值. {由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.} 1.A,错误代码返回顶部 Tip:{由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.} 1.B,出错原因分析返回顶部 1.C,相关解决方法返回顶部 作者:ylbtech出处:http://ylbtech.cnblogs.com/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此

未能计算表达式的值

不知道为什么,越是上线,越是莫名其妙的出很多问题 环境:vs2013 调试问题的时候,监视不管用,不论什么监视值都是:未能计算表达式的值,这尼玛要急死人. 1. 项目是debug的啊,代码应该没有任何优化才对啊.之前还能调试来着. 2. 代码明显没有问题,即便是有问题也有异常捕捉.显然也不是代码的问题 3. 查了查也没有具体尝试,但是从各种现象上分析,应该是环境中出了什么问题,尼玛肯定重启下iis就可以了. 重启iis, ok.求解为什么会出此问题.问题原因在哪里.解决方法. 未能计算表达式的值

数据结构实验:计算表达式的值--顺序栈

实验题目:栈的应用-算术表达式求值 实验环境:    Visual C++ 6.0                   实验目的 : 1 .掌握栈的定义及实现: 2 .掌握利用栈求解算术表达式的方法. 实验内容: 通过修改完善教材中的算法3.4,利用栈来实现算术表达式求值的算法.对算法3.4中调用的几个函数要给出其实现过程: (1) 函数In(c):判断c是否为运算符: (2) 函数Precede(t1,t2):判断运算符t1和t2的优先级: (3) 函数Operate(a,theta,b):对

poj3295 Tautology , 计算表达式的值

给你一个表达式,其包括一些0,1变量和一些逻辑运算法,让你推断其是否为永真式. 计算表达式的经常使用两种方法:1.递归: 2.利用栈. code(递归实现) #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> using namespace std; char str[2000]; int pos; bool ca

由于线程停在某个无法进行垃圾回收的点(可能是因为已对代码进行了优化),因此无法计算表达式的值

前段时间在调试代码的过程中,调试器无法跟踪到变量的值并报异常,AnisometryT Cannot evaluate expression because a thread is stopped at a point where garbage collection is impossible, possibly because the code is optimized. 如下图所示: 发现在以上代码的下面,有一个类型的构造方法含有很多个参数: 后查找资料,发现在 .net 3.5 以及32位

Asp.Net异常:&quot;由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值&quot;的解决方法

PRB: 如果使用 Response.End,Response.Redirect 或 Server.Transfer,ThreadAbortException 发生 解决方案 若要变通解决此问题,请使用下列方法之一: 为Response.End,调用HttpContext.Current.ApplicationInstance.CompleteRequest方法,而不是Response.End能够绕过到Application_EndRequest事件的代码执行. 对于Response.Redir

算法Sedgewick第四版-第1章基础-020一按优先级计算表达式的值

1 /****************************************************************************** 2 * Compilation: javac EvaluateDeluxe.java 3 * Execution: java EvaluateDeluxe 4 * Dependencies: Stack.java 5 * 6 * Evaluates arithmetic expressions using Dijkstra's two