Я уже пробовал использовать atoi
, а затем переключил их обратно на строки, чтобы нажать, я пытаюсь сделать калькулятор rpn для класса, так что структура push, pop, seek и stack - это то, как тогда должно быть, но я не могу получить его добавьте целочисленные значения.Как добавить значения, поскольку они являются строками?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct stack
{
const char * data;
struct stack *bottom;
};
struct stack * push(struct stack *stk,const char * x)
{
struct stack *nstk = (struct stack *)malloc(sizeof(struct stack));
nstk->data = x;
nstk->bottom = stk;
return nstk;
}
const char * peek(struct stack *stk)
{
if(stk -> data)
return stk->data;
else
return("Stack is empty");
}
struct stack *pop(struct stack *stk)
{
struct stack *tmp;
tmp = stk->bottom;
stk->bottom = NULL;
free(stk);
return tmp;
}
FILE * input_from_args(int argc,const char *argv[])
{
if(strcmp(argv[1],"-e") != 0 && strcmp(argv[1],"-c") != 0 && strcmp(argv[1],"-g") != 0)
{
printf("Option %s is not supported \n", argv[1]);
exit(0);
}
else
{
return stdin;
}
}
void evaluate(struct stack * equation)
{
int op;
int op2;
int ans;
if(strcmp("A",equation->data) == 0)
{
op = (int)pop(equation)-> data;
op2 = (int)pop(equation)-> data;
ans = op + op2;
printf("%i",ans);
}
}
void convert(struct stack * equation)
{
}
void other (struct stack * equation)
{
}
int main(int argc,const char *argv[])
{
FILE *src = input_from_args(argc, argv);
if (src == NULL)
{
printf("%s", "Invalid Source");
exit(EXIT_FAILURE);
}
struct stack * equation = NULL;
int i;
for(i=2; i <= argc; i++)
{
equation = push(equation,argv[i]);
}
if(strcmp(argv[1],"-e") == 0)
{
evaluate(equation);
}
else if(strcmp(argv[1],"-c") == 0)
{
convert(equation);
}
else if(strcmp(argv[1],"-g") == 0)
{
other(equation);
}
return EXIT_SUCCESS;
}
, что все, что я до сих пор, если вы заметили какие-либо другие проблемы, которые прекрасно, но то, что я действительно хочу знать, как оценить уравнение постфикса с этой структурой данных, пример ввода будет -e 2 2 A 5 X.
Почему вы настаиваете на сохранении ваших данных в виде строк? Если это связано с тем, что вы должны иметь возможность хранить оператор в том же стеке, добавьте для него элемент struct. – usr2564301
Я уже пробовал это, это для класса, если я не оставляю push, pop, peek и struct так, как они есть, или я получу окраску, как я упоминал в оригинальной записи. – user4872257
Тогда вы * do * должны использовать 'atoi' и' itoa'. Вы упомянули, что вы пробовали это, но потерпели неудачу - ну, это уродливо, но это должно сработать. Как бы то ни было, ваш текущий код выходит из строя, потому что вы пытаетесь добавить строки. * Кастинг * строка для int - это совсем неправильная идея. – usr2564301