Witam, czy mógłby ktoś mi pomóc w przerobieniu tego kodu na taki, by wyrażenie const char * expressionToParse = "6.5-2.5*10/5+2*5";
nie było zdefiniowanie globalnie, tylko by była możliwość podania wyrażenia z klawiatury? Męczę się, próbuje przeróżnymi funkcjami, ale nic nie idzie ;v
#include <iostream>
#include <sstream>
using namespace std;
const char * expressionToParse = "6.5-2.5*10/5+2*5";
istringstream parse(expressionToParse) ;
char peek()
{
return static_cast<char>(parse.peek()) ;
}
char get()
{
return static_cast<char>(parse.get()) ;
}
double expression();
double number()
{
double result ;
parse >> result ;
return result;
}
double factor()
{
if ((peek() >= '0' && peek() <= '9') || peek() == '.')
return number();
else if (peek() == '(')
{
get(); // '('
double result = expression();
get(); // ')'
return result;
}
else if (peek() == '-')
{
get();
return -expression();
}
return 0; // error
}
double term()
{
double result = factor();
while (peek() == '*' || peek() == '/')
if (get() == '*')
result *= factor();
else
result /= factor();
return result;
}
double expression()
{
double result = term();
while (peek() == '+' || peek() == '-')
if (get() == '+')
result += term();
else
result -= term();
return result;
}
int main(double argc, char* argv[])
{
double result = expression();
cout << result << endl;
return 0;
}