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

Передача в функцию знака операции (+,-,*,/) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запись и считывание двух фраз из файла по условию http://www.cyberforum.ru/cpp-beginners/thread1221942.html
Стоит задача создать программу которая будет записывать 2 фразы в 2 разные переменные и считывать эти фразы из файла и потом идёт проверка 2 фразы из 2 переменной и пишется фраза. У меня пишет что я...
C++ Константа типа short Как в программе задать константу типа short? Чтобы понятнее было приведу индефикаторы, которые в результате дают соответствующий тип константе. по умолчанию - int. L - long LL - long long http://www.cyberforum.ru/cpp-beginners/thread1221929.html
C++ Побитовые операции, Что делает операция ^
Здравствуйте! Что делает эта операция? char * a; for (int i=0;i<n;i++) a= a^"$";
C++ Стек. Выведите все вхождения символов указанного набора в текст в обратном порядке
Дан текст, состоящий из заглавных и строчных английских букв, символов ! ; ? . , - : ; ) ( ' " и пробелов. Выведите все вхождения символов указанного набора в текст в обратном порядке. Для...
C++ Строки: удалить все символы, которые размещены между скобками http://www.cyberforum.ru/cpp-beginners/thread1221911.html
Помогите пожалуйста. Без понятия как это сделать. Удалить из заданной последовательности все символы которые размещены между скобками ("(...)"). Сами скобки так же должны быть удалены. Внутри...
C++ Расчет среднего заработка (Pascal -> C++) РАСЧЕТ СРЕДНЕГО ЗАРАБОТКА ЗА 3 месяца ФИО Заработок за 1 месяц(руб.) Заработок за 2 месяца(руб.) Заработок за 3 месяца(руб.) Средний заработок (руб.) Разработать программу, реализующую ввод данных... подробнее

Показать сообщение отдельно
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
03.07.2014, 16:59
На просторах инета нашел..
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
89
90
91
92
93
94
95
96
97
#include <iostream>
 
int parseT(const char* s, int value = 0, bool op = true);
int parseU(const char* s, int limit, int value = 1,
                     bool op = true);
 
 
bool is_number(const char c)
{
    return c >= '0' && c <= '9';
}
 
 
bool is_valid(const char c)
{
    return is_number(c) || c == '+' || c == '-' || c == '*' || c == '/';
}
 
 
bool my_static_assert(bool b, const char*)
{
    return b ? true : throw std::exception();
}
 
 
int myatoi_private(const char* s, int len, int value = 0)
{
    return *s && len
        ? (my_static_assert(is_number(*s), "Invalid character!"),
        myatoi_private(s + 1, len - 1,
        (*s - '0') + value * 10))
        : value;
}
 
 
int myatoi(const char* s, int len)
{
    return my_static_assert(len, "No side by side operators!"),
        myatoi_private(s, len);
}
 
 
int parseU_private(const char* s, int limit, const char* begin, int len,
    int value, bool mul)
{
    return *s && limit
        ? (*s == '*' || *s == '/'
        ? (mul
        ? parseU(s + 1, limit - 1, value * myatoi(begin, len),
        *s == '*')
        : parseU(s + 1, limit - 1, value / myatoi(begin, len),
        *s == '*'))
        : parseU_private(s + 1, limit - 1, begin, len + 1, value, mul))
        : (mul
        ? value * myatoi(begin, len)
        : value / myatoi(begin, len));
}
 
 
int parseU(const char* s, int limit, int value, bool op)
{
    return parseU_private(s, limit, s, 0, value, op);
}
 
 
int parseT_private(const char* s, const char* begin, int len,
    int value, bool add)
{
    return *s
        ? (*s == '+' || *s == '-'
        ? (add
        ? parseT(s + 1, value + parseU(begin, len),
        *s == '+')
        : parseT(s + 1, value - parseU(begin, len),
        *s == '+'))
        : parseT_private(s + 1, begin, len + 1, value, add))
        : (add
        ? value + parseU(begin, len)
        : value - parseU(begin, len));
}
 
 
int parseT(const char* s, int value, bool op)
{
    return parseT_private(s, s, 0, value, op);
}
 
int main()
{
    const char* e = "2+2*2";
 
    auto res = parseT(e);
 
    std::cout << res << std::endl;
 
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru