码迷,mamicode.com
首页 > 其他好文 > 详细

中缀表达式std

时间:2018-01-21 16:13:56      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:get   har   ret   ++   strlen   main   入栈   else   操作   

#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
using namespace std;
int number[101],i = 0, p = 1;
char symbol[101],s[256], t[256];
void push() //算符入栈运算
{
symbol[++p] = s[i];
}
void pop() //运算符栈顶元素出栈,并取出操作数栈元素完成相应的运算
{
switch(symbol[p--])
{
case ‘+‘:number[p] += number[p + 1];break;
case ‘-‘:number[p] -= number[p + 1];break;
case ‘*‘:number[p] *= number[p + 1];break;
case ‘/‘:number[p] /= number[p + 1];break;
}
}
bool can() //判断运算符的优先级别,建立标志函数
{
if ((s[i] == ‘+‘ || s[i] == ‘-‘) && symbol[p] != ‘(‘) return 1;
if ((s[i] == ‘*‘ || s[i] == ‘/‘) && (symbol[p] == ‘*‘ || symbol[p] == ‘/‘))return 1;
return 0;
}
int main()
{
printf("String :");
gets(s);
s[strlen(s)] = ‘)‘;
symbol[p] = ‘(‘;
while (i < strlen(s))
{
while (s[i] == ‘(‘) //左括号处理
{
push();i++;
}
int x = 0;
while (s[i] >= ‘0‘ && s[i] <= ‘9‘) //取数入操作数栈
x = x * 10 + s[i++] - ‘0‘;
number[p] = x;
do
{
if (s[i] == ‘)‘) //右括号处理
{
while (symbol[p] != ‘(‘) pop();
number[--p] = number[p + 1];
}
else
{ //根据标志函数值作运算符入栈或出栈运算处理
while (can()) pop();
push();
}
i++;
}while (i < strlen(s) && s[i - 1] == ‘)‘);
}
printf("%d\n",strlen(s));
printf("Result=%d", number[0]);
return 0;
}

 

中缀表达式std

标签:get   har   ret   ++   strlen   main   入栈   else   操作   

原文地址:https://www.cnblogs.com/captain1/p/8324239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!