zoukankan      html  css  js  c++  java
  • infix expression 计算完全版

    #include<iostream>
    #include<stack>
    #include<string>
    using namespace std;
    
    char compare(char tp, char op)
    {
    	if (((tp == '+' || tp == '-') && (op == '*' || op == '/')) || (tp == '#'))
    		return '<';
    	else if (tp == '('&&op != ')')
    		return '<';
    	else if ((tp == '*' || tp == '/'||tp=='+'||tp=='-') && (op == '('))
    		return '<';
    	return '>';
    }
    
    int compute(int n1, int n2, char op)
    {
    	if (op == '+')
    		return n1 + n2;
    	else if (op == '-')
    		return n1 - n2;
    	else if (op == '*')
    		return n1*n2;
    	else if (op == '/')
    		return n2 / n1;
    }
    
    int main()
    {
    	stack<char>num;
    	stack<char>oper;
    
    	oper.push('#');
    
    	string s;
    	cin >> s;
    
    	for (int i = 0; i<s.length(); i++)
    	{
    		if (s[i] == '0' || s[i] == '1' || s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '6' || s[i] == '7' || s[i] == '8' || s[i] == '9')
    			num.push(s[i]);
    		else
    		{
    			char comp = compare(oper.top(), s[i]);
    			if (comp == '<')
    				oper.push(s[i]);
    			else if (comp == '>')
    			{
    				if (s[i] == ')')
    				{
    					if (num.size() != 1)
    					{
    						while (oper.top() != '(')
    						{
    							int num1 = num.top() - '0';
    							num.pop();
    							int num2 = num.top() - '0';
    							num.pop();
    							int result = compute(num1, num2, oper.top());
    							num.push(result + '0');
    							oper.pop();
    						}
    					}
    					oper.pop();
    				}
    				else
    				{
    					int num1 = num.top();
    					num.pop();
    					int num2 = num.top();
    					num.pop();
    					char result = compute(num1, num2, oper.top());
    					num.push(result);
    					oper.pop();
    					oper.push(s[i]);
    				}
    			}
    		}
    	}
    
    	if (num.size() != 1)
    	{
    		while (oper.top() != '#')
    		{
    			int num1 = num.top()-'0';
    			num.pop();
    			int num2 = num.top()-'0';
    			num.pop();
    			int result = compute(num1, num2, oper.top());
    			num.push(result+'0');
    			oper.pop();
    		}
    	}
    
    	cout << num.top() << endl;
    
    	return 0;
    }
    

      

  • 相关阅读:
    搜索条件中的模式匹配,及包含关键字条件匹配
    Makefile用法,详细到让人吐。
    循序渐进实现仿QQ界面(三):界面调色与控件自绘
    VC 多线程编程
    用UDL快速生成一个数据库连接字符串。
    VC CMarkup所有方法说明
    VC判断控件是否按钮。
    学习笔记(一)
    libvirt0.8.2安装(方法一)
    centos中kvm网桥的设置
  • 原文地址:https://www.cnblogs.com/KennyRom/p/5979876.html
Copyright © 2011-2022 走看看