用栈完成算数表达式的计算

完成算数表达式的计算如(2+13)(10-8/(1+1*3))

代码

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
string s="(2+1*3)*(10-8/(1+1*3))";
char opx[10]={
   
   '+','-','*','/','(',')','\0'};//哪些运算符 
int opn[265];//运算符对应的数字 
char priority[10][10]={
   
   //上一个运算符和现在运算符的优先顺序。'='是要消除配对的括号。 
    {
   
   '>', '>', '<', '<', '<', '>','>'},
    {
   
   '>', '>', '<', '<', '<', '>','>'},
    {
   
   '>', '>', '>', '>', '<', '>','>'},
    {
   
   '>', '>', '>', '>', '<', '>','>'},
    {
   
   '<', '<', '<', '<', '<', '=',' '},
    {
   
   '<', '<', '<', '<', '=', ' 
在C语言中,利用顺序(数组实现)计算简单的算术表达式通常涉及前缀(prefix)表示法或者逆波兰表示法(RPN,也称后缀表示法)。这里是一个基于逆波兰表示法的简单示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STACK_SIZE 100 int is_digit(char c) { return ('0' <= c && c <= '9'); } int pop(stack_t *s) { if (s->top == -1) { return INT_MIN; } int top_val = s->data[s->top]; s->top--; return top_val; } void push(stack_t *s, int val) { if (s->top >= MAX_STACK_SIZE - 1) { printf("Stack overflow.\n"); return; } s->data[++s->top] = val; } int eval_rpn(const char *tokens) { stack_t s = { -1 }; const char *token = tokens; while (*token != '\0') { if (is_digit(*token)) { int num = 0; while (is_digit(*++token)) { num = num * 10 + *token - '0'; } push(&s, num); } else { int op2 = pop(&s); int op1 = pop(&s); switch (*token++) { case '+': push(&s, op1 + op2); break; case '-': push(&s, op1 - op2); break; case '*': push(&s, op1 * op2); break; case '/': if (op2 != 0) push(&s, op1 / op2); else printf("Division by zero error.\n"); break; default: printf("Invalid operator.\n"); return INT_MIN; } } } return pop(&s); } int main() { char expression[] = "2 3 + 4 *"; int result = eval_rpn(expression); printf("Result of the expression: %d\n", result); return 0; } ``` 在这个代码中,我们首先检查字符是否为数字,如果是则读取直到遇到非数字字符,然后将整数值推入。遇到操作符时,从顶弹出两个操作数进行相应的运算,并把结果压回。最后顶剩余的就是表达式计算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值