Вывести значение выражения (простейший калькулятор) - C (СИ)
Формулировка задачи:
Согласно строке, изображающая арифметическое выражение вида «<цифра> ± <цифра> ± ... ± <цифра>», где на месте знака операции «±» находится символ «+» или «-» (например, «4 + 7 -2-8 »), вывести значение выражения (целое число).
Решение задачи: «Вывести значение выражения (простейший калькулятор)»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
int calc(const char* s){
int st[2] = {0};
char m = 0;
int i = 0;
do {
if(isdigit(*s)){
if(i < 2)
st[i++] = (int)(*s - '0');
} else if(*s == '+')
m = '+';
else if(*s == '-')
m = '-';
if((i > 1) && (m != 0)){
switch(m){
case '+':
st[0] += st[1];
break;
case '-':
st[0] -= st[1];
break;
}
--i;
m = 0;
}
} while(*s++);
return st[0];
}
int main(void){
char s[] = "5 - 2 + 3 - 9 + 1 + 9";
printf("result: %d\n", calc(s));
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода/вывода и строками.
- Определяем функцию
calc, которая принимает на вход строку с математическим выражением и выполняет его вычисление. - Внутри функции
calcинициализируем массивstдвумя нулями, переменнойmприсваиваем значение 0, а переменнойiзначение 0. - Далее в цикле
do-whileсчитываем каждый символ из входной строки. - Если символ является цифрой, то преобразуем его в целое число и добавляем в соответствующий элемент массива
st. - Если символ является оператором сложения
+, то сохраняем его в переменнойm. - Если символ является оператором вычитания
-, то сохраняем его в переменнойm. - Если в массиве
stбольше одного элемента и имеется оператор (m != 0), то выполняем соответствующую операцию сложения или вычитания в соответствии с операторомm. - Уменьшаем значение
iна единицу, чтобы пропустить текущий элемент массиваstпри следующей итерации цикла. - Устанавливаем значение
mравным 0, чтобы сигнализировать о том, что следующий элемент массиваstне является оператором. - В цикле
do-whileпродолжаем обработку символов до тех пор, пока не достигнем конца строки. - Возвращаем результат вычисления математического выражения, который хранится в первом элементе массива
st. - В функции
mainсоздаем строкуs, содержащую математическое выражение. - Вызываем функцию
calcс аргументомsи выводим результат на экран. - Завершаем программу с возвращаемым значением 0, что означает успешное выполнение.