Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
postfix eval in c++ - multidigits decimal
#include <iostream> #include <string> #include <cmath> using namespace std; template<class T> class Node { public: T data; Node<T> *next; Node() { data = 0; next = 0; } Node(T value, Node<T> *nxt = 0) { data = value; next = nxt; } }; template<class T> class List { private: Node<T> *head, *tail; public: List() { head = tail = 0; } int Count() { int s = 0; Node<T> *temp = head; while (temp != 0) { temp = temp->next; s++; } return s; } void Add2Head(T value) { if (head == 0) { head = tail = new Node<T>(value, 0); } else { Node<T> *temp = new Node<T>(value, 0); temp->next = head; head = temp; } } void DeleteHead(T &n) { if (head == 0) { return; } else if (head == tail) { n = (head->data); head = tail = 0; } else { n = (head->data); Node<T> *temp = head->next; delete head; head = temp; } } void DeleteHead() { if (head == 0) { return; } else if (head == tail) { head = tail = 0; } else { Node<T> *temp = head->next; delete head; head = temp; } } T GetHeadValue() { return (head->data); } bool IsEmpty() { return (head == 0); } void Print() { cout << "*****" << endl; Node<T> *temp=head; while (temp!=0) { cout << temp->data << endl; temp=temp->next; } cout << "*****" << endl; } }; template<class T> class Stack { private: List<T> l; public: void Push(T n) { l.Add2Head(n); } bool Pop(T &n) { if (l.IsEmpty()) { return false; } else { l.DeleteHead(n); return true; } } bool IsEmpty() { return l.IsEmpty(); } bool Flush() { if (l.IsEmpty()) { return false; } else { while (!l.IsEmpty()) { l.DeleteHead(); } return true; } } T Top() { return (l.GetHeadValue()); } void Print() { l.Print(); } }; int eval(string str) { char d; int m,n; Stack<int> s; int length=0; int result=0; for (int i=0;i<str.size();i++) { d=str[i]; if (d>='0' && d<='9') { result += (d-'0')*pow(10,length); s.Push(result); length++; } else if (d==' ') { length=0; result=0; } else if (d=='+') { s.Pop(m); s.Pop(n); s.Push(m+n); } else if (d=='-') { s.Pop(m); s.Pop(n); s.Push(n-m); } else if (d=='*') { s.Pop(m); s.Pop(n); s.Push(m*n); } else if (d=='/') { s.Pop(m); s.Pop(n); s.Push(n/m); } } return s.Top(); } void main() { /* char str[] = "Hello World!"; Stack s; cout << str << endl; for (int i = 0; i < sizeof(str); i++) { s.Push(str[i]); } cout << endl; cout << s.IsEmpty() << endl; cout << s.Top() << endl; */ //system("pause"); cout << eval("55 9 *") << endl; }
run
|
edit
|
history
|
help
0
#21
MSVC alias template
zero size std::array parameter
Is a Union Member's Destructor Called
Not an overflow
Catching divide-by-zero with /EHc
problem_soultion2
#19
Use std::is_base_of to subset STL container contents.
unordered map broken msvc