添加项目文件。
This commit is contained in:
44
ScientificCalculator/Calc.cpp
Normal file
44
ScientificCalculator/Calc.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#include "Calc.h"
|
||||
#include <iostream>
|
||||
|
||||
// <20><>̬<EFBFBD><CCAC>Ա<EFBFBD><D4B1>ʼ<EFBFBD><CABC>
|
||||
Tokenizer Calc::tokenizer;
|
||||
InfixToPostfix Calc::converter;
|
||||
PostfixEval Calc::evaluator;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڣ<D3BF><DAA3><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double Calc::eval(const string& expression) {
|
||||
vector<Token> tokens = tokenizer.run(expression);
|
||||
vector<Token> postfix = converter.run(tokens);
|
||||
return evaluator.run(postfix);
|
||||
}
|
||||
|
||||
// <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ӿڣ<D3BF><DAA3><EFBFBD> try-catch <20><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bool <20><>־
|
||||
bool Calc::safeEval(const string& expr, double& res) {
|
||||
try {
|
||||
res = eval(expr);
|
||||
return true;
|
||||
}
|
||||
catch (const exception& e) {
|
||||
cerr << "[Error] " << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>Խӿڣ<D3BF><DAA3><EFBFBD>ӡ<EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>token <20>б<EFBFBD> <20><> <20><><EFBFBD><D7BA><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
|
||||
void Calc::debug(const string& expr) {
|
||||
try {
|
||||
vector<Token> tokens = tokenizer.run(expr);
|
||||
cout << "[Token List]" << endl;
|
||||
for (const auto& t : tokens) cout << t.value << " ";
|
||||
cout << endl;
|
||||
|
||||
vector<Token> postfix = converter.run(tokens);
|
||||
cout << "[Postfix]" << endl;
|
||||
for (const auto& t : postfix) cout << t.value << " ";
|
||||
cout << endl;
|
||||
}
|
||||
catch (const exception& e) {
|
||||
cerr << "[Debug Error] " << e.what() << endl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user