Вычисление выражения, заданного в виде строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Нужна помощь с задачкой: Дано строку типа "X + Y", где X и Y - некоторые числа, + - операция, которую нужно над ними выполнить. Необходимо выделить из строки эти числа, знак операции и вывести результат суммирования. Перед и после "+" может стоять пробел.

Туплю на считывании:

хочу считать значение до +, получаю же "+7" вместо "1" (ввожу "1+7"), причем когда встречается в строке пробел - программа не работает. Помогите пожалуйста Вот что пробовал писать:
char ryad[10];
    char roz[]="+ -";
    char*p1,*pr;
    for (p1=ryad;*p1!='+';p1++)
        gets(p1);
        puts(p1);

Решение задачи: «Вычисление выражения, заданного в виде строки»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int CalcStr(char *Str)
{
    int i,l,a,a1,a2;
    char c,z;
    l=strlen(Str);
    a=0;
    for (i=0; i<l; i++)
    {
        c=Str[i];
        if ((c <= '9') && (c >= '0')) 
            a=10*a+(c-'0');
        else
            if ((c=='+') || (c=='-') || (c=='*') || (c=='/'))
            {
                z=c;
                a1=a;
                a=0;
            }
            else
                if (c /= ' ')
                {
                    printf("Bad symbol!\n");
                    return 0;
                }
 
    }
    a2=a;
    switch(z)
    {
    case '+':
            return a1+a2;
    case '-':
            return a1-a2;
    case '*':
            return a1*a2;
    case '/':
            return a1/a2;
    }
}
 
int main(int argc, char* argv[])
{
    char *Op="12-7";
    printf("%s = %d\n",Op,CalcStr(Op));
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы для работы с памятью и строками.
  2. Определяется функция CalcStr, которая принимает в качестве аргумента строку и выполняет вычисления, используя порядок операций.
  3. В функции CalcStr объявляются переменные:
    • i - цикл для прохода по всем символам строки;
    • l - длина строки;
    • a - переменная для хранения промежуточных результатов вычислений;
    • a1 и a2 - для сохранения первого и второго промежуточных результатов;
    • c - текущий символ строки;
    • z - символ операции.
  4. Вычисляется длина строки с помощью функции strlen.
  5. Инициализируется переменная a равной 0.
  6. Происходит проход по всем символам строки:
    • В каждой итерации значение c присваивается текущему символу строки.
    • Если c является цифрой, то он добавляется к a.
    • Если c является операцией, то сохраняется предыдущий результат в a1, a сбрасывается в 0 и сохраняется текущая операция в z.
    • Если c не является операцией или цифрой, то проверяется, является ли он пробелом. Если это так, выводится сообщение об ошибке и возвращается 0.
  7. После цикла a2 присваивается значение a, и происходит проверка z с помощью оператора switch:
    • Если z равно '+', то возвращается сумма a1 и a2.
    • Если z равно '-', то возвращается разность a1 и a2.
    • Если z равно '*', то возвращается произведение a1 и a2.
    • Если z равно '/', то возвращается частное a1 и a2.
  8. В функции main определяется строка Op со значением 12-7.
  9. Вызывается функция CalcStr с аргументом Op.
  10. Результат вычислений выводится на экран с помощью функции printf.
  11. Функция main возвращает 0, завершая работу программы.

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы