Кладёт значение в стек из таблицы 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)

Объяснение кода листинга программы

Вот что происходит в данном коде:

  1. В функции push происходит обработка одного аргумента типа char *.
  2. В тело функции push входит инструкция printf с двумя аргументами: строкой и числом.
  3. Значение аргумента x приводится к типу int с помощью оператора int() и затем выводится на экран с помощью функции printf.
  4. В стек добавляется значение аргумента x с помощью функции push_char.
  5. Возвращается значение 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5