LeetCode 772. Basic Calculator III调试模板-wowAC

此代码为了方便大家调试用,使用的时候直接用自己的Solution类覆盖代码中的类,程序的输入文件路径默认在桌面的data_in.txt,使用的时候直接将LeetCode的case复制进文件即可。如下图所示。

image.png


#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cmath>

using namespace std;

/***************改成自己的代码****************/
class Solution {
public:
    string token;
    string str;
    int index;
    //找出下一个符号 + - * / ( ) 或者 数字
    string get_token() {
        while(str[index]==' ') index++;  //去除空格
        string token = "";
        if(index == str.length()) return token;
        switch(str[index]) {
            case '+':
                token += "+";
                index++;
                break;
            case '-':
                token += "-";
                index++;
                break;
            case '*':
                token += "*";
                index++;
                break;
            case '/':
                token += "/";
                index++;
                break;
            case '(':
                token += '(';
                index++;
                break;
            case ')':
                token += ')';
                index++;
                break;
            default: //数字
                while(str[index]>='0' && str[index]<='9') {
                    token += str[index];
                    index++;
                }
                break;
        }
        return token;
    }

    double exp() {
        double res = additive();
        while(token=="+" || token=="-") {
            string op = token;
            token = get_token();    //跳过'+' '-'
            if(op=="+") res += additive();
            else res -= additive();
        }
        return res;
    }
    double additive() {
        double res = factor();
        while(token=="*" || token=="/") {
            string op = token;
            token = get_token();   //跳过'*' '/'
            if(op == "*") res *= factor();
            else res = floor(res / factor());
        }
        return res;
    }
    double factor() {
        double res;
        if(token == "(") {
            token = get_token();
            res = exp();
            token = get_token();  //跳过')'
        }else {
            res = atoi(token.c_str());
            token = get_token();  //跳过num
        }
        return res;
    }
    int calculate(string s) {
        str = s;
        index = 0;
        token = get_token();
        return exp();
    }
};
/***************到此为止****************/

int main()
{
    //改成自己的输入路径,注意用双斜杠分割 默认输入文件为桌面的data_in.txt
    fstream fin("C:\\Users\\xingxing\\Desktop\\data_in.txt");
    string line;
    Solution solu;
    int kase = 1;
    while(getline(fin, line)) {
        if(line == "") continue;
        line = line.substr(1, line.length()-2);
        cout<<"case"<<kase++<<": "<<endl;
        cout<<solu.calculate(line)<<endl;
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注