c++-栈处理括号表达式,有个变量不知道什么用处

问题描述

栈处理括号表达式,有个变量不知道什么用处

这是一段利用栈处理括号表达式的程序:
1. 当你看到一个左括号,直接入栈;
2. 看到一个右括号,从stack总pop对象,直到遇到左括号,左括号也pop出栈。
3. 然后将一个值作为运算结果存入栈中。

题目来源于C++ Primer,给的程序如下。

问题:
1、这里有个变量seen记录了有多少个括号,但是这个seen有什么用?
2、expr这个变量,定义为什么要定义成引用?

 int main()
{
    auto& expr = "This is (Mooophy(awesome)((((wooooooooo))))) and (ocxs) over";
    auto repl = '#';
    auto seen = 0;

    stack<char> stk;

    for (auto c : expr) {
        stk.push(c);
        if (c == '(') ++seen;   // open
        if (seen && c == ')') { // pop elements down to the stack
            while (stk.top() != '(') stk.pop();
            stk.pop();      // including the open parenthesis
            stk.push(repl); // push a value indicate it was replaced
            --seen;         // close
        }
    }

    // Test
    string output;
    for (; !stk.empty(); stk.pop()) output.insert(output.begin(), stk.top());
    cout << output << endl; // "This is # and # over"
}

解决方案

这是C++ PRIMER上的吧
1.感觉seen并没有起到啥作用,除非你的括号没匹配对(表达式本身就是错的),左括号漏了,可以防止一直往前读越界崩溃
2.感觉这个引用除了省点系统开销,并没有什么用。。。

时间: 2024-11-03 17:37:44

c++-栈处理括号表达式,有个变量不知道什么用处的相关文章

abcde-怎样用c实现链栈的算术表达式运算,不得使用stl模板

问题描述 怎样用c实现链栈的算术表达式运算,不得使用stl模板 按照严蔚敏版的书上的算法,用c语言链栈实现,不让使用stl模板,有没有原代码 解决方案 #include""stdio.h"" #include""stdlib.h"" #include""string.h"" #include""math.h"" #define true 1 #de

用栈计算表达式-c++如何用栈实现计算表达式?

问题描述 c++如何用栈实现计算表达式? 要求用栈,表达式可以输入加减乘除,小括号,小数点,可以计算两位数以上的,可以接收负数. 解决方案 表达式的类型为string哦! 解决方案二: 这是第一次创建博客 ,我想把它当成 成长日记的存在? 保存自己的代码? 并且和别人分享英语不好??? 见谅/**栈的后进先出,运算符的优先级,*当运算符和栈中运算符比较 优先级小 ,字符出栈进行计算,否则字符入栈*/ IntStack is=new IntStack(); charstack cs1=new ch

malloc-数据结构用栈实现算术表达式的求值运算

问题描述 数据结构用栈实现算术表达式的求值运算 小白一枚,最近用栈实现算术表达式的求值运算结果出现好多问题,单独的加减乘除运算都能够实现,但一旦加上括号运算就停在那命令窗口也不能输入信息,跪求大神指点原因 附上代码和截图: #include #include #include #define STACK_INIT_SIZE 100 //存储空间初始分配量; #define S 10 //存储空间分配增量; #define OK 1 #define ERROR 0 typedef int Elem

问题求助 数据结构-使用双栈实现中缀表达式求值一个字符栈一个数字栈

问题描述 使用双栈实现中缀表达式求值一个字符栈一个数字栈 程序写好没输出啊,急求啊......主要BUG 在Nibolansuanfa()这个自定义函数里面前面的可以忽略..... /*核心函数*/ double Nibolansuanfa(char *str,stack *s) { initstack(&s);//初始化栈 char st[20],tc,xy;//st[20]里面放数字字符串 int j=0,i=0,yxcount=0; double d; while(str[j]!='')

matlab-为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值

问题描述 为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值 为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值 解决方案 看看是不是有别的地方又赋值了,或者变量名搞错了. 解决方案二: 调试过程中可以很明显的看到,赋值符号右边是对的,但是就是不能输出到左边变量 解决方案三: 该变量是不是全局变量呢

qdskd-怎样用c实现链栈的算术表达式运算,不得使用stl模板

问题描述 怎样用c实现链栈的算术表达式运算,不得使用stl模板 按照严蔚敏版的书上的算法,用c语言链栈实现,不让使用stl模板,有没有原代码 解决方案 http://download.csdn.net/detail/immoyu/3431468 解决方案二: 利用栈实现简单算术表达式求值算术表达式求值(顺序栈实现)

el表达式取js变量获取不到

问题描述 el表达式取js变量获取不到 var selected = "${requestScope.list[i].supplierid}"; var j = ${fn:length(list)}; for(var i=0;i<j;i++){ alert(selected); } ${requestScope.list[i].supplierid} 用js变量i循环取不到值 解决方案 var selected = "${requestScope.list[i].sup

C++中用栈来判断括号字符串匹配问题的实现方法_C 语言

本文实例主要实现:输入一个括号字符串,依次检验,若为左括号则入栈,若为右括号则出栈一个字符判断是否与之相对应,在最后还需判断栈是否为空,如果不为空则不匹配. 首先回顾栈的基本知识: 1.定义栈的结构体并初始化一个新栈: struct stack { char strstack[stacksize]; int top; }; void InitStack(stack &s) { s.top=-1; } 2.出栈和入栈操作: char Push(stack &s,char a) { if(s.

C#教程第二课:表达式,类型和变量

变量|教程 本节课将介绍C# 语言的表达式,类型和变量.本节课要达到如下几个目的:1.了解什么是"变量" 2.学习C#的简单类型 3.对C#表达式有个初步的了解 4.了解什么是String类型 5.学习如何使用数组 "变量"仅仅是数据的存储位置.你可以把数据存放到其中,或者从中取出来作为C#表达式的一部分.变量中所存放的数据的含义是通过类型来控制的. C#是个强类型(???)的语言.这样,一切对变量的操作都是针对该变量的类型而进行的.为了保证变量中所存放数据的合法性