Кладёт значение в стек из таблицы ASCII - C (СИ)
Формулировка задачи:
Добрый день. Смысл моей задачи состоит в том, чтобы реализовать обратную польскую нотацию с использованием массива (который служит как стек).
Проблема: Я считываю строку посимвольно. Если символ - число, то я кладу его в стек. У меня кладётся не само значение, а его номер из таблицы ASCII. Как это исправить?
Спасибо за помощь!
#include <stdio.h>
#define MAX_STACK_SIZE 100000
int A[MAX_STACK_SIZE];
int top = 0;
void push(int x)
{
A[top] = x;
top++;
}
int pop()
{
top--;
return A[top];
}
int isEmpty()
{
return top == 0;
}
int isNumber(int x)
{
if(x >= '0' && x <= '100000')
return 1;
else
return 0;
}
int isOperation(char x)
{
if(x == '*' || x == '+' || x == '-')
return 1;
else
return 0;
}
int result(char str[])
{
int i, res = 0, operat = 0;
for(i = 0; i < strlen(str); i++) {
if(isNumber(str[i])) {
push(str[i]);
}
else if(isOperation(str[i])) {
if(isEmpty())
return 0;
else if(top == 1) {
temp = pop();
return temp;
}
else {
operat = str[i];
int x1 = pop();
int x2 = pop();
if(operat == '+') {
res = x1 + x2;
push(res);
}
else if(operat == '*') {
res = x1 * x2;
push(res);
}
else if(operat == '-') {
res = x1 - x2;
push(res);
}
}
}
else
continue;
}
int ores = pop();
return ores;
}
int main()
{
char str[MAX_STACK_SIZE];
int i = 0;
gets(str);
printf("%d", result(str));
return 0;
}Решение задачи: «Кладёт значение в стек из таблицы ASCII»
textual
Листинг программы
void push(char *x)
Объяснение кода листинга программы
Вот что происходит в данном коде:
- В функции
pushпроисходит обработка одного аргумента типаchar *. - В тело функции
pushвходит инструкцияprintfс двумя аргументами: строкой и числом. - Значение аргумента
xприводится к типуintс помощью оператораint()и затем выводится на экран с помощью функцииprintf. - В стек добавляется значение аргумента
xс помощью функцииpush_char. - Возвращается значение
1.