Convert the code for C++ to C. theres also an error in it. Thanks! .... #include using namespace std; int precedence(char op){ if(op == '+'||op == '-') return 1; if(op == '*'||op == '/') return 2; return 0; } // this function will perform arithmetic operations. int applyOp(int a, int b, char op){ switch(op){ case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; } } int evaluate(string tokens){ int i; //we are using stack to store integer values. stack values; // using this stack to store operators. stack ops; for(i = 0; i < tokens.length(); i++){ if(tokens[i] == ' ') continue; else if(tokens[i] == '('){ ops.push(tokens[i]); } else if(isdigit(tokens[i])){ int val = 0; while(i < tokens.length() && isdigit(tokens[i])) { val = (val*10) + (tokens[i]-'0'); i++; } i--; } else if(tokens[i] == ')') { while(!ops.empty() && ops.top() != '(') { int val2 = values.top(); values.pop(); int val1 = values.top(); values.pop(); char op = ops.top(); ops.pop(); values.push(applyOp(val1, val2, op)); } if(!ops.empty()) ops.pop(); } else { while(!ops.empty() && precedence(ops.top()) >= precedence(tokens[i])){ int val2 = values.top(); values.pop(); int val1 = values.top(); values.pop(); char op = ops.top(); ops.pop(); values.push(applyOp(val1, val2, op)); } // Push current token to 'ops'. ops.push(tokens[i]); } } while(!ops.empty()){ int val2 = values.top(); values.pop(); int val1 = values.top(); values.pop(); char op = ops.top(); ops.pop(); values.push(applyOp(val1, val2, op)); } return values.top(); } int main() { cout << evaluate("10 + 2 * 6") << "\n"; cout << evaluate("100 * 2 + 12") << "\n"; cout << evaluate("100 * ( 2 + 12 )") << "\n"; cout << evaluate("100 * ( 2 + 12 ) / 14"); return 0; }

Computer Networking: A Top-Down Approach (7th Edition)
7th Edition
ISBN:9780133594140
Author:James Kurose, Keith Ross
Publisher:James Kurose, Keith Ross
Chapter1: Computer Networks And The Internet
Section: Chapter Questions
Problem R1RQ: What is the difference between a host and an end system? List several different types of end...
icon
Related questions
Question
100%

Convert the code for C++ to C. theres also an error in it. Thanks! 
....

#include <bits/stdc++.h>
using namespace std;

int precedence(char op){

            if(op == '+'||op == '-')

            return 1;

            if(op == '*'||op == '/')

            return 2;

            return 0;

}

 

// this function will perform arithmetic operations.

int applyOp(int a, int b, char op){

            switch(op){

                        case '+': return a + b;

                        case '-': return a - b;

                        case '*': return a * b;

                        case '/': return a / b;

            }

}

int evaluate(string tokens){

            int i;

           

            //we are using  stack to store integer values.

            stack <int> values;

           

            // using this stack to store operators.

            stack <char> ops;

           

            for(i = 0; i < tokens.length(); i++){

                       

                        if(tokens[i] == ' ')

                                    continue;

                       

                        else if(tokens[i] == '('){

                                    ops.push(tokens[i]);

                        }

                       

                        else if(isdigit(tokens[i])){

                                    int val = 0;

                                   

                                    while(i < tokens.length() &&

                                                                        isdigit(tokens[i]))

                                    {

                                                val = (val*10) + (tokens[i]-'0');

                                                i++;

                                    }

                                   

                                    i--;

                        }

                       

                        else if(tokens[i] == ')')

                        {

                                    while(!ops.empty() && ops.top() != '(')

                                    {

                                                int val2 = values.top();

                                                values.pop();

                                               

                                                int val1 = values.top();

                                                values.pop();

                                               

                                                char op = ops.top();

                                                ops.pop();

                                               

                                                values.push(applyOp(val1, val2, op));

                                    }

                                   

                                    if(!ops.empty())

                                    ops.pop();

                        }

                       

                                                else

                        {

                                   

                                    while(!ops.empty() && precedence(ops.top())

                                                                                                >= precedence(tokens[i])){

                                                int val2 = values.top();

                                                values.pop();

                                               

                                                int val1 = values.top();

                                                values.pop();

                                               

                                                char op = ops.top();

                                                ops.pop();

                                               

                                                values.push(applyOp(val1, val2, op));

                                    }

                                   

                                    // Push current token to 'ops'.

                                    ops.push(tokens[i]);

                        }

            }

           

           

            while(!ops.empty()){

                        int val2 = values.top();

                        values.pop();

                                               

                        int val1 = values.top();

                        values.pop();

                                               

                        char op = ops.top();

                        ops.pop();

                                               

                        values.push(applyOp(val1, val2, op));

            }

           

                        return values.top();

}

 

int main() {

            cout << evaluate("10 + 2 * 6") << "\n";

            cout << evaluate("100 * 2 + 12") << "\n";

            cout << evaluate("100 * ( 2 + 12 )") << "\n";

            cout << evaluate("100 * ( 2 + 12 ) / 14");

            return 0;

}
Expert Solution
steps

Step by step

Solved in 2 steps with 1 images

Blurred answer
Recommended textbooks for you
Computer Networking: A Top-Down Approach (7th Edi…
Computer Networking: A Top-Down Approach (7th Edi…
Computer Engineering
ISBN:
9780133594140
Author:
James Kurose, Keith Ross
Publisher:
PEARSON
Computer Organization and Design MIPS Edition, Fi…
Computer Organization and Design MIPS Edition, Fi…
Computer Engineering
ISBN:
9780124077263
Author:
David A. Patterson, John L. Hennessy
Publisher:
Elsevier Science
Network+ Guide to Networks (MindTap Course List)
Network+ Guide to Networks (MindTap Course List)
Computer Engineering
ISBN:
9781337569330
Author:
Jill West, Tamara Dean, Jean Andrews
Publisher:
Cengage Learning
Concepts of Database Management
Concepts of Database Management
Computer Engineering
ISBN:
9781337093422
Author:
Joy L. Starks, Philip J. Pratt, Mary Z. Last
Publisher:
Cengage Learning
Prelude to Programming
Prelude to Programming
Computer Engineering
ISBN:
9780133750423
Author:
VENIT, Stewart
Publisher:
Pearson Education
Sc Business Data Communications and Networking, T…
Sc Business Data Communications and Networking, T…
Computer Engineering
ISBN:
9781119368830
Author:
FITZGERALD
Publisher:
WILEY