Giter Club home page Giter Club logo

codinginterviews's Introduction

#include #include #include #include using namespace std;

//判断是否为操作符 bool isOperator(char op) { return (op == '+' || op == '-' || op == '*' || op == '/'); }

//判断是否为数字 bool isDigit(char op) { return (op >= '0' && op <= '9'); }

//计算表达式结果 int cal(int left, int right, char op) { int res = 0; if (op == '+') res = left + right; else if (op == '-') res = left - right; else if (op == '*') res = left * right; else if (op == '/') res = left / right; return res; }

//判断运算符优先级 int pirority(char op) { if (op == '+' || op == '-') return 1; if (op == '*' || op == '/') return 2; else return 0; }

//逆波兰表达式转中缀表达式 int evalRPN(string &tokens) { if (tokens.size() <= 0) return 0; stack s1;//创建辅助栈 int left = 0, right = 0;//定义左/右操作数 int result = 0;//定义中间结果 string temp; for (unsigned int i = 0; i < tokens.size(); i++ ) {

	if (isDigit(tokens[i]))//扫描数字入栈
	{
		temp.push_back(tokens[i]);
	}
	else if (tokens[i] == ' ')
	{
		if (temp.size() > 0)   //防止运算符后面跟分隔符,所以判断一下temp里面是否有数字
		{
			s1.push(atoi(temp.c_str()));
			temp.clear();
		}
	}
	else if (isOperator(tokens[i]) && !s1.empty())
	{
		//防止数字后面直接跟运算符,所以这里也要判断一下temp是否还有数字没有提取出来
		if (temp.size() > 0)
		{
			s1.push(atoi(temp.c_str()));
			temp.clear();
		}
		right = s1.top();
		s1.pop();
		
		left = s1.top();
		s1.pop();
	
		result = cal(left, right, tokens[i]);
		s1.push(result);
	}
	
}
if (!s1.empty())
{
	result = s1.top();
	s1.pop();
}

return result;

}

//中缀表达式转逆波兰表达式 vector infixToPRN(const string & token) { vector v1; int len = token.size();//string的长度 if (len == 0) return v1;

stack<char> s1;//存放逆波兰式的结果
int outLen = 0;
for (int i = 0; i < len ; i++)
{
	if (token[i] == ' ')//跳过空格
		continue;
	if (isDigit(token[i]) )//若是数字,直接输出
	{
		v1.push_back(token[i]);
	}
	else if (token[i] == '(')//如果是'(',则压栈
	{
		s1.push(token[i]);
	}else if (token[i] == ')')//如果是')', 则栈中运算符逐个出栈并输出,直至遇到'('。 '('出栈并丢弃
	{
		while (s1.top() != '(')
		{
			v1.push_back( s1.top());
			s1.pop();
		}
		s1.pop();//此时栈中为')',跳过
	}
	while (isOperator(token[i]))//如果是运算符
	{
		//空栈||或者栈顶为)||新来的元素优先级更高  
		if( s1.empty() || s1.top() == '(' || pirority(token[i]) > pirority(s1.top()))
		{
			s1.push(token[i]);// 当前操作符优先级比栈顶高, 将栈顶操作符写入后缀表达式
			break;
		}else 
		{
			v1.push_back(s1.top());
			s1.pop();
		}
		 
		
	}
}
while (!s1.empty())//输入结束,将栈中剩余操作符出栈输出
{
	v1.push_back(s1.top());
	s1.pop();
}
return v1;

} int main() { //vector sRPN = {"4", "13", "5" , "/", "+"};//逆波兰表达式 //cout << "逆波兰表达式结果为:" << evalRPN(sRPN) <<endl;

//vector<string> fix = {"4", "+", "13", "/", "5"};//中缀表达式
string fix = "2+2*(1*2-4/2)*1";
vector<char> RPN = infixToPRN(fix);
string s_fix;
for (auto it = RPN.begin(); it != RPN.end(); it++)
{
	cout << *it << " ";
	s_fix += *it;
	s_fix += " ";
}
cout << endl;
cout << "逆波兰表达式结果为:" << evalRPN(s_fix) << endl;



system("pause");

return 0;

}

codinginterviews's People

Contributors

aheadlead avatar flcwl avatar gatieme avatar happerys avatar lzx1413 avatar neycyanshi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.