how delete node in xml file using php?

Infix to Postfix to Output (Postfix Calculator) using stacks in C++?

  • Good day, everyone! I'm new in C++ and I need help from you experts. I have here a code that should ask the user for the infix expression then converts it to postfix and outputs the result (postfix calculator). However, I cannot convert postfix to output instantly so as soon as it displays the postfix expression, it asks for the postfix expression again (with spaces after e.g., 1 2 + ) before outputting the real answer. There is no error or warning but when I run the program, the computer says "file.exe has stopped working" after displaying the postfix expression. So the program is able to convert infix to postfix expression correctly but there is still some jinx when displaying the output. #include <iostream> #include <cstring> #include <cstdlib> using namespace std; struct node { char data; node *next; }; node *top=NULL; node *bottom=NULL; node *key; node *last; node *before_last; void push (const char Symbol) { key = new node; key->data = Symbol; key->next = top; top = key; } void push_for_output (node* &stack, int key) { node* newNode = new node; newNode->data = key; newNode->next = stack; stack = newNode; } const char pop() { if (!top) { cout << "Stack underflow\n" << endl; return ' '; } node* key = top; top = top->next; char ch = key->data; delete key; return ch; } int pop_for_output (node* &stack) { int key = stack->data; node* nodeToDelete = stack; stack = stack->next; delete nodeToDelete; return key; } bool isOperator (char *token) { if (strcmp(token, "+") == 0) { return true; } else if (strcmp(token, "-") == 0) { return true; } else if (strcmp(token, "*") == 0) { return true; } else if (strcmp(token, "/") == 0) { return true; } else { return false; } } const bool is_empty() { return !top; } int postfix(const char *infix) { char infix_ch[100]={NULL}; char postfix_ch[100]={NULL}; node* stack = NULL; strcpy(infix_ch,"("); strcat(infix_ch, infix); strcat(infix_ch,")"); char symbol[5]={NULL}; char temp[5]={NULL}; for(int i=0; i<strlen(infix_ch); i++) { symbol[0]=infix_ch[i]; if(symbol[0]=='(') push(symbol[0]); else if(symbol[0]==')') { symbol[0]=pop( ); while(symbol[0]!='(') { strcat(postfix_ch, symbol); symbol[0]=pop( ); } } else if(symbol[0]=='^' || symbol[0]=='*' || symbol[0]=='/' || symbol[0]=='+' || symbol[0]=='-') { if(symbol[0]=='*' || symbol[0]=='/') { temp[0]=pop( ); while(temp[0]=='^' || temp[0]=='*' || temp[0]=='/') { strcat(postfix_ch, temp); temp[0]=pop( ); } push(temp[0]); } else if(symbol[0]=='+' || symbol[0]=='-') { temp[0]=pop( ); while(temp[0]!='(') { strcat(postfix_ch, temp); temp[0]=pop( ); } push(temp[0]); } push(symbol[0]); } else strcat(postfix_ch, symbol); } cout << "Postfix: " << postfix_ch; char postfix[80]; cout << "\nEnter postfix expression: "; cin.getline(postfix, 80); char *tokens = strtok(postfix, " "); while (tokens != NULL) { if (isOperator (tokens)) { int operand2 = pop_for_output(stack); int operand1 = pop_for_output(stack); int result; if (strcmp(tokens, "+") == 0) { result = operand1 + operand2; } else if (strcmp(tokens, "-") == 0) { result = operand1 - operand2; } else if (strcmp(tokens, "*") == 0) { result = operand1 * operand2; } else if (strcmp(tokens, "/") == 0) { result = operand1 / operand2; } push_for_output (stack, result); } else { push_for_output (stack, atoi (tokens)); } tokens = strtok(NULL, " "); } cout << pop_for_output(stack); system("pause"); return 0; } int main( ) { char infix_values[100]={NULL};

  • Answer:

    I strongly believe that you have made the code too complex. Neverthless I have corrected and tested till convertion of infix to postfix. You are assigning strings to some value as {NULL} make it as "" or nothing.

Hellohel... at Yahoo! Answers Visit the source

Was this solution helpful to you?

Other answers

I think I agree with Venkate that not only is it too complex, but odd in other ways. For example, this is wrong: char infix_ch[100]={NULL}; char postfix_ch[100]={NULL}; You don't want to initialize the array to null, but to fill the individual content chars to 0. And whats with: int main( ) { char infix_values[100]={NULL}; It appear the main code has been cut off, so we can't really follow it at all.

Motorhead

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.