c++数据结构堆栈加减乘除运算器 我从教科书上copy了一段代码输入运算式直接停止工作 为什么会这样?

我输入的是自带测试用例运算式
(((60+40)/50*(16-4))
#include
#include
#include
#include
#include
using namespace std;
double read_and_evaluate(istream& ins);
void evaluate_stack_tops(stack& numbers,stack& operations);
int main()
{
double answer;
cout<<"Type a fully parenthesized arithmetic expression:"< answer= read_and_evaluate(cin);
cout return EXIT_SUCCESS;
}
double read_and_evaluate(istream& ins)
{
const char DECIMAL = '.';
const char RIGHT_PARENTHESIS = ')';
stack numbers;
stack operations;
double number;
char symbol;
while(ins&&ins.peek() != '\n')
{
if(isdigit(ins.peek())||(ins.peek()==DECIMAL))
{
ins>>number;
numbers.push(number);
}
else if(strchr("+-*/",ins.peek())!=NULL)
{
ins>>symbol;
operations.push(number);
}
else if(ins.peek()==RIGHT_PARENTHESIS)
{
ins.ignore();
evaluate_stack_tops(numbers,operations);
}
else
ins.ignore();
}
return numbers.top();
}
void evaluate_stack_tops(stack& numbers, stack& operations)
{
double operand1,operand2;
operand2=numbers.top();
numbers.pop();
operand1=numbers.top();
numbers.pop();
switch(operations.top())
{
case '+': numbers.push(operand1+operand2);
break;
case '-': numbers.push(operand1-operand2);
break;
case '*': numbers.push(operand1*operand2);
break;
case '/': numbers.push(operand1/operand2);
break;
}
operations.pop();
}

0

5个回答

把stack的定义,pop,peek等方法加进去试试

0

通过在线编译,没有错。

http://ideone.com/Bbr2Eq

0

http://download.csdn.net/detail/brave2002honest/8546565
仿照这个例子翻译成C++语言的,别总看书里的例子,自己摸索摸索会有很多收获。

0

明显括号对不上,多了一个左括号吧?

0

无法执行到底是什么现象? 说明白点,是不是编译器问题

-1
qq_26163659
qq_26163659 已经解释了 求帮忙
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言练习 6-1. 简单计算器(20)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输入样例: 1+2*10-10/2=
浙大PTA数据结构Pop Sequence
02-线性结构3 Pop Sequence Given a stack which can keep MMM numbers at most. Push NNN numbers in the order of 1, 2, 3, …, NNN and pop randomly. You are supposed to tell if a given sequence of numbers is a
习题6-7 简单计算器 (20 分)模拟简单运算器的工作。
习题6-7 简单计算器 (20 分)模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输入样例: 1+2*10-1...
jeapedu 20 字符串习题答案
链接: https://pan.baidu.com/s/1i6OadqH 密码: ma9y # 1 print jeapedu001~jeapedu100 #jeapedu000 #jeapedu001 #jeapedu009 #... #jeapedu010 #jeapedu011 #jeapedu099 #... #jeapedu100 # if elif else i = 0 while ...
浙大版《数据结构(第2版)》题目集 简单计算器
习题2.1 简单计算器(20 分) 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
PTA练习(中M2018春C入门和进阶练习集)05
7-7 后天(5 分)如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。输入格式:输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。输出格式:在一行中输出D天的后天是星期几。输入样例:3输出样例:5#include&amp;lt;stdio.h&amp;gt; int main() { int ...
7-20 简单计算器(20 分)
题目要求 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 #include &amp;lt;stdio.h&amp;gt; int main() { int n1, n2; char ch; scanf(&quot;%d&quot;, &amp;amp;n1); // 不管怎样先输入一个数 while(1) { ...
6-7 简单计算器
//简单计算器 #include int main(int argc,char const *argv[]) { int value1,value2; int sum=0; int flag=1; char ch; scanf("%d",&value1); while((ch=getchar())!='=') { scanf("%d",&value2); if(ch=='
PTA简单的计算器
  7-1 简单的计算器 (10 分) 编程实现一个简单的计算器,实现两个整数的加、减、乘、除。 注意:输入的数字为整数,可能大于Long.MAX_VALUE (即: 9223372036854775807) 输入格式: 例如输入被除数和除数,除号是“/”: 199818221687230837883277970155607217447/15607605175531087007(除法运算) 输出...
模拟简单运算器
【描述】 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。 【输入】 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 【输出】 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 【输入示例】 1+2*10-10/2= 【
简单计算器(不含括号)
做一个简单计算器,包括加减乘除四则混合运算,不加括号!!!输入一个数字指定本次计算多少算式n,接下来每输入一个算式回车计算。代码如下:#include &amp;lt;stdio.h&amp;gt; int main() { int n; double a[100]; while(scanf(&quot;%d&quot;,&amp;amp;n)!=EOF) { while(n--) { doubl...
用栈实现简单的加减乘除(包括括号)
通过运用栈实现表达式的加减乘除,并且可以包含括号等一系列运算符
7-20 简单计算器 (20 分)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输入样例: 1+2*10-10/2= 输出样例...
5-41 简单计算器 (20分)
5-41 简单计算器   (20分) 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”
mooc中习题--简单运算器
7-20 简单计算器(20 分) 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ER
中M2018春C入门和进阶练习集7-20 简单计算器(20 分)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输入样例: 1+2*10-10/2= 输出...
使用栈实现的带括号的四则运算
用栈实现的四则运算。支持括号,以及多位数字。使用了中序转后序然后计算的思路。
模拟简单计算器
Description 程序模拟简单运算器的工作:输入一个算式(没有空格),遇到‘=’号说明输入结束,输出结果。假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例如,输入“1+210-10/2&amp;amp;amp;quot;后结果为10。 Input 输入一个以等号结束的四则运算式(不含括号) Output 输出计算结果 Sample Input 1+210-10/2=...
简单计算器(PTA)
模拟简单运算器得工作,假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的 优先级相同,按从左到右的顺序计算。[^1] 【输入格式】 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数,遇到等号&quot;=“说明输入结束。 【输出格式】 在一行中输出算式结果,或者如果除法分母为0或非法运算符,则输出错误&quot;ERROR”. 【输入样例】 1+2*10-10/2= 【输出样例】 10 ...
C++栈实现混合运算(算式为字符串)
功能:使用堆栈来实现简单加减乘除混合运算。 代码简洁易懂,注释详细,就直接撸代码。一百行, #include&amp;lt;cstdio&amp;gt; #include&amp;lt;iostream&amp;gt; #include&amp;lt;stack&amp;gt; #include&amp;lt;cstdlib&amp;gt; using namespace std; int tool(char s[]); bool tool1(char ...
简单的加减乘除运算 java
[code=&quot;java&quot;][/code] package cn.leinuoa.collection; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import ...
用栈实现简单加减乘除
简单的加减乘除计算器 资源来源于c++程序设计 吴乃陵版本
C语言堆栈实现表达式运算
表达式求值,这里用的是算符优先法的方式实现。任何一个表达式都可以由操作数、运算符和界限符组成,算符之间的关系有三种:&amp;gt; &amp;lt; =,介于这三种关系,我们可以列出所有的关系            +               -             *             /           (              )             # ----------...
PTA习题6-7 简单计算器(20 分)
#include&amp;lt;stdio.h&amp;gt; int main() { int num,sum,error=0; char op='0'; scanf(&quot;%d&quot;,&amp;amp;sum); scanf(&quot;%c&quot;,&amp;amp;op); do{ if(op=='=') break; scanf(&quot;%d&quot;,&amp;amp;num)...
7-20 简单计算器
7-20 简单计算器 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。 输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。 输...
Python 小白实例(六)——简单的加法运算器(100以内)
while True: num1 = input(&quot;please input num1&quot;) #输入num1 num1 = float(num1) num2 = input(&quot;please input num2&quot;) #输入num2 num2 = float(num2) if num1 &amp;gt; 100 or num2 &amp;gt; 100: #判断输...
通过函数指针实现四则运算
希望在增加整数运算函数时,只需添加整数运算韩束本身,而无需修改运算函数,这就需要在运算函数中使用函数指针来代替指针运算类型参数。 int process(int a,int b,int(* p)((int ,int)){return p(a,b);} int main() { int a=10,b=20; int res1=process(a,b,add); int res2=proc...
7-20 简单计算器(20 分) PAT
7-20 简单计算器(20 分)模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。输入格式:输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。输出格式:在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。输入样例:1+2*10-10/2= 输出样...
习题2.1 简单计算器(20 分)
#include&amp;lt;stdio.h&amp;gt; int main() {   int a,b;   char c;   scanf(&quot;%d&quot;,&amp;amp;a);   scanf(&quot;%c&quot;,&amp;amp;c);   while(c!='=')   {     scanf(&quot;%d&quot;,&amp;amp;b);     if(c=='+') a=a+b;     else if(c=='-') a=a-b;     e...
栈实现加减乘除
写的很麻烦,毕竟算是刚开始学,希望以后能写的又快又好。括号功能没加,数字位数大于1位的恐怕要加个函数转换了。 编译环境:vc++6.0 // demo1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include
习题6-7 简单计算器(20 分)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。输入格式:输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。输出格式:在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。输入样例:1+2*10-10/2= 输出样例:10#include&amp;lt;...
基于循环双向链表的大整数计算器c++实现
包含链表的基本操作,能够实现多数位的大整数计算,以及十进制数和二进制数的相互转换。
算术表达式的实现,支持加减乘除,括号运算,表达式转二叉树
基本思路首先,用户输入的待求表达式,也就是中缀表达式,对于人来说,这个很好理解,但是对于计算机,后缀表达式求值更加容易。如果看成一棵二叉树,其实中缀表达式就是对一个二叉树的中序遍历,后缀表达式(也叫逆波兰表达式)就是后序遍历的结果。那么主要思路就来了:先把中缀表达式转换成后缀表达式,再对后缀表达式进行求值。步骤一,中缀表达式转后缀表达式两个数据结构:1,后缀表达式队列用于存放最后的后缀表达式2,操作
中国大学MOOC-翁恺-C语言程序习题第六周
06-0. 混合类型数据格式化输入(5) 本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。 输入格式: 输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。 输出格式: 在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。 输入样例: 2.12 88 c 4.7 输出样
(华为机考题)通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
#include #include void add1(char *p1,int p2){ int i,j; int a,b,sign; i=0; a=p1[i]-'0'; i++; while(p1[i]!=' '){ a = a*10 +p1[i]-'0';    i++; } i++; if(p1[i] ='+') sign=1; else if(p1
实现加减乘除计算器。(c语言)
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include &quot;main.h&quot; int main() { int a=0; int b=0; char m; int result=0; printf(&quot;请输入数字:\r\n&quot;); scanf(&quot;%d&quot;,&amp;amp;a); getchar(); printf(&quot;请输入运算符:.
内存堆栈和数据结构堆栈
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教
堆栈 链表的实现方式
main函数给出实验数据。   #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; typedef struct node { int a; struct node *next; }stack; stack *create_stack() { stack *s = (stack*)malloc(sizeof(struct node)); ...
计算器输入计算式输出结果
这个比较简单,只能实现两个数的加减乘除运算,后面那个虽然实现了输入式子输出结果,但是比较麻烦。import java.util.Scanner;public class Calculator { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Syste
麻烦各位大神看看我用codeblocks写的C,为什么会停止运行!!!!
#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;    /*某公司为员工提供了基本工资、物价津贴及房租津贴。    其中物价津贴占基本工资的40%,房租津贴占基本工资的20%。    编写一个程序计算实领工资,要求输入某员工的基本工资,    计算应向员工支付的实际工资。                   */    //实现思路    /*物价...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 我为什么要学习java 我为什么想学习大数据