#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <stack>

using namespace std;

#define MAX_CHARS 100

int main(int argc, char* argv[])
{
    char input_str[MAX_CHARS + 1], *p;
    stack<double> num_stack;
    int c;
    double a, b, n;

    cout << "Enter RPN string: ";
    cin.getline(input_str, MAX_CHARS);
    p = strtok(input_str, " ");

    while(p)
    {
        c = p[0];

        if(c == '+' || c == '*' || c == '/' || c == '-')
        {
            if(num_stack.size() < 2)
            {
                cout << "Error: too many ops." << endl;

                return -1;
            }

            b = num_stack.top();    num_stack.pop();
            a = num_stack.top();    num_stack.pop();

            switch(c)
            {
                case '+': n = a + b; break;
                case '*': n = a * b; break;
                case '/': n = a / b; break;
                case '-': n = a - b; break;
            }

            num_stack.push(n);
        }
        else
        {
            num_stack.push(atof(p));
        }

        p = strtok(NULL, " ");
    }

    cout << "The answer is: " << num_stack.top() << endl;

    return 0;
}

In the program above what is the line char input_str[MAX_CHARS + 1], *p; dong? Is looks like it's creating an array called input_str but it also looks like it's creating a pointer called p.
Also, how does strtok know where it's at in any given string. Does that strtok function keep track of it's own position throughout the program even when it's called in different locations?

Recommended Answers

All 3 Replies

The line just declares a char array and a char pointer.

strtok returns a pointer to where the split begins.

Okay, it's just declaring two varibles at one time on one line.

Yes, you can do that because they are both of the same type.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.