Leetcode=-- Basic Calculator, leetcode
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open(
And closing parentheses)
, The plus+
Or minus sign-
, Non-negative integers and empty spaces
.
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2" 2-1 + 2 " = 3"(1+(4+5+2)-3)+(6+8)" = 23
Note: Do not useeval
Built-in library function.
Implementation:
Void skipws (string & s, int * beg, bool B = false)
{
If (B ){
While (s [* beg] = ''){
(* Beg) ++;
}
} Else {
While (s [* beg] = ''| s [* beg] = '(' | s [* beg] = ')'){
(* Beg) ++;
}
}
}
Int numend (string & s, int beg)
{
While (s [beg]> = '0' & s [beg] <= '9 '){
Beg ++;
}
Return beg;
}
Int parenthesisend (string & s, int beg ){
Int brace = 0;
While (s [beg]! = ')' | Brace! = 0 ){
If (s [beg] = '('){
Brace ++;
} Else if (s [beg] = ')'){
Brace --;
}
Beg ++;
}
Return beg;
}
Int calculate (string s ){
Int start = 0;
Int result = 0;
While (start <s. size ()){
Skipws (s, & start );
If (s [start] = '+ '){
Start ++;
Skipws (s, & start );
Int end = numend (s, start );
Result + = atoi (s. substr (start, end-start). c_str ());
Start = end;
} Else if (s [start] = '-'){
Start ++;
Skipws (s, & start, true );
If (s [start] = '('){
Start ++;
Int end = parenthesisend (s, start );
Result-= calculate (s. substr (start, end-start ));
Start = end + 1;
}
Else {
Int end = numend (s, start );
Result-= atoi (s. substr (start, end-start). c_str ());
Start = end;
}
} Else {
Int end = numend (s, start );
Result = atoi (s. substr (start, end-start). c_str ());
Start = end;
}
Skipws (s, & start );
}
Return result;
}
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.