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

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

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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int CalcStr(char *Str)
  5. {
  6.     int i,l,a,a1,a2;
  7.     char c,z;
  8.     l=strlen(Str);
  9.     a=0;
  10.     for (i=0; i<l; i++)
  11.     {
  12.         c=Str[i];
  13.         if ((c <= '9') && (c >= '0'))
  14.             a=10*a+(c-'0');
  15.         else
  16.             if ((c=='+') || (c=='-') || (c=='*') || (c=='/'))
  17.             {
  18.                 z=c;
  19.                 a1=a;
  20.                 a=0;
  21.             }
  22.             else
  23.                 if (c /= ' ')
  24.                 {
  25.                     printf("Bad symbol!\n");
  26.                     return 0;
  27.                 }
  28.  
  29.     }
  30.     a2=a;
  31.     switch(z)
  32.     {
  33.     case '+':
  34.             return a1+a2;
  35.     case '-':
  36.             return a1-a2;
  37.     case '*':
  38.             return a1*a2;
  39.     case '/':
  40.             return a1/a2;
  41.     }
  42. }
  43.  
  44. int main(int argc, char* argv[])
  45. {
  46.     char *Op="12-7";
  47.     printf("%s = %d\n",Op,CalcStr(Op));
  48.     return 0;
  49. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы