Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- class PStack
- {
- public:
- PStack();
- void parse( char* expression );
- bool isoper( std::string str );
- bool isfloat( char* );
- void push( double val );
- void docalc( std::string oper );
- double gettop();
- private:
- double Stk[100];
- double *It;
- int opers_num;
- const char** valid_opers;// = { "+", "-", "*", "/", "^" };
- };
- bool PStack::isfloat( char* str )
- {
- char* ch = str;
- do
- {
- if( *ch != '.' )
- {
- if( *ch > '9' || *ch < '0')
- {
- return false;
- }
- }
- } while ( *(++ch) );
- return true;
- }
- bool PStack::isoper( std::string str )
- {
- for(int i = 0; i < 5; i++)
- {
- if( str == valid_opers[i] )
- {
- return true;
- }
- }
- return false;
- }
- void PStack::parse( char* expression )
- {
- char* pch = strtok(expression, " ");
- do
- {
- if( !isoper( pch ) )
- {
- if( isfloat( pch ) )
- {
- this->push(atof(pch));
- }
- else
- {
- printf( "ERROR TYPE\n" );
- return;
- }
- }
- else
- {
- this->docalc( pch );
- }
- } while (pch = strtok( NULL, " "));
- }
- PStack::PStack()
- {
- It = Stk;
- opers_num = 5;
- valid_opers = (const char**)malloc( sizeof( char* ) * opers_num);
- valid_opers[0] = "+";
- valid_opers[1] = "-";
- valid_opers[2] = "*";
- valid_opers[3] = "/";
- valid_opers[4] = "^";
- }
- void PStack::push( double val )
- {
- *It++ = val;
- }
- void PStack::docalc( std::string oper )
- {
- if( It - 2 >= Stk)
- {
- double vals[2] = {*(It-2), *(It-1)};
- It -= 2;
- if( oper == "+" )
- {
- this->push( vals[0] + vals[1] );
- }
- else if (oper == "-")
- {
- this->push( vals[0] - vals[1] );
- }
- else if (oper == "*")
- {
- this->push( vals[0] * vals[1] );
- }
- else if (oper == "/")
- {
- this->push( vals[0] / vals[1] );
- }
- else if (oper == "^")
- {
- this->push( pow(vals[0], vals[1]) );
- }
- }
- }
- double PStack::gettop()
- {
- return *( It - 1 );
- return 0;
- }
- int main()
- {
- PStack ps;
- char ch[] = "1.0 2.0 1.0 + + 2.0 *";
- ps.parse(ch);
- printf("%f", ps.gettop());
- getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment