• 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;
    }
    

      

  • 相关阅读:
    Python学习笔记第二十三周(Flask架构)
    Python学习笔记第二十二周(前端知识点补充)
    Python学习笔记第二十一周
    Python学习笔记第二十周
    Python学习笔记第十九周
    Python学习笔记第十八周
    Python学习笔记第十七周
    Python学习笔记第十六周
    python完成九九乘法表
    python
  • 原文地址:https://www.cnblogs.com/KennyRom/p/5979876.html
Copyright © 2020-2023  润新知