Кладёт значение в стек из таблицы 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д