Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include "expression.h"
- Expression::Expression()
- {
- saPile = new std::stack<int>();
- }
- Expression::~Expression()
- {
- delete saPile;
- }
- int Expression::chiffresEnNombre(std::vector<int>* unTab)
- {
- int i=0, n=0;
- for (std::vector<int>::iterator it = unTab->begin(); it != unTab->end(); it++, i++)
- {
- n += (*it) * pow(10, unTab->size() - i - 1);
- }
- return n;
- }
- int Expression::evaluer(std::vector<char>* unTab)
- {
- while (!saPile->empty())
- {
- saPile->pop();
- }
- std::vector<int>* leTabChiffres = new std::vector<int>();
- for (std::vector<char>::iterator it = unTab->begin(); it != unTab->end(); it++)
- {
- if ((*it) >= '0' && (*it) <= '9')
- {
- leTabChiffres->push_back(conversionCharEnInt(*it));
- }
- else
- {
- if (!leTabChiffres->empty())
- {
- saPile->push(chiffresEnNombre(leTabChiffres));
- //std::cout << "Empile: " << saPile->top() << std::endl;
- leTabChiffres->resize(0);
- }
- if ((*it) == ' ')
- {
- continue;
- }
- else
- {
- saPile->push(traiterOperation(*it));
- //std::cout << "Empile: " << saPile->top() << std::endl;
- }
- }
- }
- if (!leTabChiffres->empty())
- {
- saPile->push(chiffresEnNombre(leTabChiffres));
- }
- delete leTabChiffres;
- if (saPile->size() != 1) throw 3;
- return saPile->top();
- }
- int Expression::conversionCharEnInt(char unChar)
- {
- return unChar - '0';
- }
- int Expression::traiterOperation(char uneOp)
- {
- int a, b;
- if (saPile->empty()) throw(2);
- b = saPile->top();
- saPile->pop();
- //std::cout << "Dépile: " << b << std::endl;
- if (saPile->empty()) throw(2);
- a = saPile->top();
- saPile->pop();
- //std::cout << "Dépile: " << a << std::endl;
- switch (uneOp)
- {
- case '+':
- return a+b;
- break;
- case '-':
- return a-b;
- break;
- case '*':
- return a*b;
- break;
- case '/':
- if (b == 0) throw 0;
- return a/b;
- break;
- case '%':
- if (b == 0) throw 0;
- return a%b;
- break;
- case '<':
- return a<b;
- break;
- case '>':
- return a>b;
- break;
- case '=':
- return a==b;
- break;
- case '!':
- return a!=b;
- break;
- case '&':
- return a&&b;
- break;
- case '|':
- return a||b;
- break;
- }
- throw 1;
- return 0;
- }
- // EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement