原文地址:http://blog.csdn.net/brucehb/article/details/46593913
我:1、当循环中嵌套循环时,要十分注意变量i的值变化。转载的这篇文章中,将i的值完全交由程序中去增减。
2、当判断条件中有长度越界和其他的判断时,要将长度判断放在前边。
3、找个时间研究一下表达式求值。
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7 " 3/2 " = 1 " 3+5 / 2 " = 5
Note: Do not use the eval
built-in library function.
- class Solution {
- public:
- int calculate_help(int left, char symbol, int right)
- {
- switch(symbol)
- {
- case '*':
- return left * right;
- case '/':
- return left / right;
- default:
- return 0;
- }
- }
- int calculate(string s) {
- int n = s.length();
- if (n < 1)
- {
- return 0;
- }
- int result = 0;
- stack<int> value;
- stack<char> symbol;
- symbol.push('+');
- for (int i = 0; i < n;)
- {
- if (s[i] == '+' || s[i] == '-'
- || s[i] == '*' || s[i] == '/')
- {
- symbol.push(s[i]);
- i++;
- }
- else if (s[i] == ' ')
- {
- i++;
- }
- else
- {
- int right = 0;
- while (i < n && s[i] <= '9' && s[i] >= '0')
- {
- right = right*10 + s[i]-'0';
- i++;
- }
- if (!symbol.empty() && (symbol.top() == '*' || symbol.top() == '/'))
- {
- right = calculate_help(value.top(), symbol.top(), right);
- value.pop();
- symbol.pop();
- }
- value.push(right);
- }
- }
- while (!symbol.empty())
- {
- int temp = value.top();
- if (symbol.top() == '-')
- {
- temp = -temp;
- }
- result += temp;
- value.pop();
- symbol.pop();
- }
- return result;
- }
- };