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 use the eval built-in library function.

题目说模仿一个计算器,做加减法,不过要注意括弧跟空格,空格就直接跳吧然后其他的保存下来,用栈分别存储数字括弧跟运算符,每遇到一个”)“就弹栈运算,数字跟括弧放一起,不过其实这样不太好,因为得为括弧设定一个特定的数,因为这个WA了一次。

class Solution {
public:
stack<int> s_num;
stack<char> fuhao;
int count_f=0;
void cal_sub(){
if(s_num.size()<2)
return;
stack<int> nums;
stack<char> cal;
int b=s_num.top();
s_num.pop();
nums.push(b);
int a=s_num.top();
s_num.pop();
char c;
while(a!=-11111111){
c=fuhao.top();
fuhao.pop(); nums.push(a);
cal.push(c);
if(s_num.size()>0){
a=s_num.top();
s_num.pop();
}
else
a=-11111111;
}
count_f--;
a=nums.top();
nums.pop();
while(nums.size()>0){
b=nums.top();
nums.pop();
c=cal.top();
cal.pop();
if(c=='+')
a=a+b;
if(c=='-')
a=a-b;
}
s_num.push(a); }
int string2num(string s){
string c_num;
for(int i=0;i<s.size();i++){
if(s[i]=='('){
s_num.push(-11111111);
count_f++;
}
if(s[i]>='' && s[i]<='')
c_num+=s[i];
if(s[i]==')') {
if(c_num!="")
s_num.push(atoi(c_num.c_str()));
c_num="";
cal_sub();
}
if(s[i]=='+' || s[i]=='-') {
if(c_num!="")
s_num.push(atoi(c_num.c_str()));
c_num="";
fuhao.push(s[i]);
}
}
if(c_num!="")
s_num.push(atoi(c_num.c_str()));
cal_sub();
return s_num.top();
}
int calculate(string s) {
return string2num(s);
}
};

[leetcode]224. Basic Calculator的更多相关文章

  1. leetcode 224. Basic Calculator 、227. Basic Calculator II

    这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...

  2. [LeetCode] 224. Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  3. Java for LeetCode 224 Basic Calculator

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  4. (medium)LeetCode 224.Basic Calculator

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  5. [LeetCode] 227. Basic Calculator II 基本计算器 II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  6. 【LeetCode】224. Basic Calculator 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 参考资料 日期 题目地址:https://lee ...

  7. 【LeetCode】224. Basic Calculator

    Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...

  8. 【刷题-LeetCode】224. Basic Calculator

    Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...

  9. 224. Basic Calculator

    题目: Implement a basic calculator to evaluate a simple expression string. The expression string may c ...

随机推荐

  1. CodeForce edu round 53 Div 2. D:Berland Fair

    D. Berland Fair time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. PymongoDB_study

    import pymongo client = pymongo.MongoClient(host='localhost',port=27017)#连接数据库 #db = client.test#指定数 ...

  3. Maven 新手入门+命令大全

    Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 官方文档(English): http://maven.apache.org/index.html Maven ...

  4. Mysql--基础(一)

    MySQL基础 一.数据库的操作 1.SQL分类: DDL(数据定义语言)   :数据定义语言 - Data Definition Language,用来定义数据库的对象,如数据表.视图.索引等.常用 ...

  5. js驗證網址URL格式

    /^((ht|f)tps?):\/\/([\w\-]+(\.[\w\-]+)*\/)*[\w\-]+(\.[\w\-]+)*\/?(\?([\w\-\.,@?^=%&:\/~\+#]*)+)? ...

  6. 【申嵌视频】基于VMWare虚拟机下安装ubuntu操作系统的详细步骤

    [申嵌视频]基于VMWare虚拟机下安装ubuntu操作系统 适合搭建mini2440, Tiny6410, smart210,Tiny4412, NanoPC-T2, NanoPC-T3, Nano ...

  7. ThinkPHP3.2 中空方法、空控制器和空模块的设置

    ThinkPHP3.2 中空方法.空控制器和空模块的设置 1.空方法设置 问题: 当你访问一个不存在的方法的时候: 如: http://localhost/test/index.php/Home/Us ...

  8. python基础知识14---迭代器、生成器、面向过程编程

    阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...

  9. Java 开始

    (事先声明:该文章并非完全是我自己的产出,更多的是我个人在看到资料后通过理解并记录下来,作为自己阅读后的一个笔记:我现在试图对自己多年工作中的知识点做一个回顾,希望能融会贯通) (此文参考<Ja ...

  10. C++中字符编码的转换(Unicode、UTF-8、ANSI)

    C++的项目,字符编码是一个大坑,不同平台之间的编码往往不一样,如果不同编码格式用一套字符读取格式读取就会出现乱码.因此,一般都是转化成UTF-8这种平台通用,且支持性很好的编码格式. Unicode ...