Обработка символьных данных - C (СИ) (70204)
Формулировка задачи:
Здравствуйте, помогите пожалуйста разобраться с задачей, я не имею даже малейшего представления с какой стороны к ней подойти, мы только закончили проходить массивы и нам безо всяких объяснений дали эту тему, в гугле я не особо много смогла найти информации на эту тему, поэтому прошу о помощи. Помогите разобраться вот с этим: В строке записан текст, имеющий вид «d1± d2±… ±dn», где di – цифры (n>1). Вычислить записанное в тексте выражение. (язык Си)
Решение задачи: «Обработка символьных данных»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void) {
char str[] = "3+4 + 5 +9 +0+ 132 + 537 - 99 +54";
int lv = 0, rv = 0, n = 0, op = 0;
char* ptr = str;
sscanf(ptr, "%d%n", &lv, &n);
ptr += n;
while(*ptr) {
while(isspace(*ptr))
ptr++;
sscanf(ptr, "%c%n", &op, &n);
ptr += n;
sscanf(ptr, "%d%n", &rv, &n);
ptr += n;
switch(op) {
case '+':
lv += rv;
break;
case '-':
lv -= rv;
break;
default:
ptr++;
}
printf("lv: %d rv: %d\n", lv, rv);
}
printf("lv: %d\n", lv);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с символами и строками
- Объявление и инициализация переменных: строки
str, значения которых равно3+4 + 5 +9 +0+ 132 + 537 - 99 +54, и переменныхlv,rv,n,op, указатель на первый символ строкиptrиsscanfдля чтения символов и чисел из строки - Первое чтение числа с помощью функции
sscanfи сохранение его в переменнуюlvи указание количества прочитанных символов в переменнуюn - Переход к следующему числу, используя указатель
ptr - Пропуск пробелов с помощью цикла
whileи функцииisspace - Чтение операции (
+,-) с помощью функцииsscanfи сохранение ее в переменнуюopи указание количества прочитанных символов в переменнуюn - Чтение следующего числа с помощью функции
sscanfи сохранение его в переменнуюrvи указание количества прочитанных символов в переменнуюn - В зависимости от операции, выполнение сложения или вычитания с помощью оператора
switch - Вывод значений переменных
lvиrvна экран - Повторение шагов 5-9 для всех чисел и операций в строке
- Вывод значения переменной
lvпосле обработки всех чисел и операций - Возврат 0, что означает успешное завершение программы