Форум программистов, компьютерный форум CyberForum.ru

Строковый калькулятор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти суму n членов арифметической прогресии с заданым начальным членом и шагом http://www.cyberforum.ru/cpp-beginners/thread190323.html
Найти суму n членов арифметической прогресии с заданым начальным членом и шагом(используя рекурсивные функции) кто сможет помогите написать буду очень благодарен
C++ Использование функций кто может напишите пожалуйста код http://www.cyberforum.ru/cpp-beginners/thread190322.html
Строковый ввод-вывод C++
Спасайте... Лабораторная работа № 9 "Строковый ввод-вывод" Цель: Работа с текстовыми файлами, ввод-вывод текстовой информации и ее хранение на внешних носителях. 1 Краткие теоретические сведения Для построчного ввода - вывода используются следующие функции; 1 char *fgets(char *s, int n, FILE *F), где char *s - адрес, по которому размещаются считанные байты;
C++ Перегрузка функций
Помогите пожалуйста... Лабораторная работа № 7 7.1. "Перегрузка функций в Си++" Цель: Знакомство с организацией перегруженных функций в Си++. 1. Краткие теоретические сведения Цель перегрузки состоит в том, чтобы функция с одним именем по разному выполнялась и возвращала разные значения при обращении к ней с различными типами и различным числом фактических параметров. Для обеспечения...
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread190319.html
Помогите с кодом.... Лабораторная работа № 6 "Строки" Цель: Изучение символьных и строковых переменных и способов их обработки в языке Си. 1. Краткие теоретические сведения Для представления символьной (текстовой) информации можно использовать символы, символьные переменные и символьные константы. Символьная константа представляется последовательностью символов, заключенной в...
C++ Функции и массивы Помогите пожалуйста... Лабораторная работа №5 "Функции и массивы" Цель : Организовать обработку массивов с использованием функций, научиться передавать массивы как параметры функций. 1. Краткие теоретические сведения 1.1. Функции Функцию в Си можно рассматривать: • как один из производных типов данных (наряду с массивами и указателями); подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.11.2010, 01:08     Строковый калькулятор
osen',
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <sstream>
#include <string>
#include <limits>
 
enum Op {
   Add,
   Sub,
   Mul,
   Div
};
 
class ArgumentParser {
public:
  ArgumentParser(const std::string& expression) {
    std::istringstream is(expression);
    
    is >> firstArgument;
    
    char ch;
    is >> ch;
    
    switch (ch)
    {
      case '+':
        operation = Add;
        break;
      case '-':
        operation = Sub;
        break;
      case '*':
        operation = Mul;
        break;
      case '/':
        operation = Div;
        break;
    }
    
    is >> secondArgument;
  }
  
  int FirstArgument () { return firstArgument; }
  int SecondArgument() { return secondArgument; }
  Op  Operation     () { return operation; }
  
private:
  int firstArgument;
  int secondArgument;
  Op  operation;
};
 
class Calculator {
public:
  int Calculate(const std::string& expression) {
    ArgumentParser argumentParser(expression);
    
    switch(argumentParser.Operation())
    {
      case Add:
        return DoAdd(argumentParser.FirstArgument(), argumentParser.SecondArgument());
      case Sub:
        return DoSub(argumentParser.FirstArgument(), argumentParser.SecondArgument());
      case Mul:
        return DoMul(argumentParser.FirstArgument(), argumentParser.SecondArgument());
      case Div:
        return DoDiv(argumentParser.FirstArgument(), argumentParser.SecondArgument());
    }
    
    return std::numeric_limits<int>::max();
  }
  
private:
  int DoAdd(int x, int y) { return x + y; }
  int DoSub(int x, int y) { return x - y; }
  int DoMul(int x, int y) { return x * y; }
  int DoDiv(int x, int y) { return x / y; }
};
 
int main() {
  Calculator calculator;
  
  std::cout << calculator.Calculate("1 + 2") << std::endl;
  std::cout << calculator.Calculate("4 - 2") << std::endl;
  std::cout << calculator.Calculate("3 * 2") << std::endl;
  std::cout << calculator.Calculate("6 / 2") << std::endl;
  
  return 0;
}
Результат: http://liveworkspace.org/code/b621c5...7562088c9be8a1
 
Текущее время: 10:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru