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

Можно ли добавить в последовательность из различных скобок цифры и знаки, чтобы получилось правильное арифметическое выражение? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сравнить строки из xls-файлов на совпадение символов и создать файлы с результатами. http://www.cyberforum.ru/cpp-beginners/thread1095750.html
Задача выглядит так. Имеется 2 xls-файла, которые надо сравнить. К примеру, в первом файле цифры с 1,2,3,5,6,7,8,10 А во втором только цифры 2,4,6,8,10. Соответственно результат в третьем...
C++ Составить класс, который отыскивает проход по лабиринту Помогите пожалуйста. Составить класс, который отыскивает проход по лабиринту. Лабиринт представляется в виде матрицы, состоящей из квадратов. Каждый квадрат либо открыт, либо закрыт. Вход в... http://www.cyberforum.ru/cpp-beginners/thread1095728.html
C++ Почему не производится операция деления?
Есть код, приведенный ниже. Никак не могу разобраться, почему не производится операция деления при заполнении массива p, заполнения тоже не производится. Пробовала операцию просто присваивания,...
C++ Исключения
читаю про исключения, сама концепция понятна, но стоит ли вообще заострять на исключениях своё внимание? например описан класс exception, от него куча всяких производных классов типа logic_error и...
C++ error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" http://www.cyberforum.ru/cpp-beginners/thread1095685.html
1>c:\proect\8\8\8.cpp(64): error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)" в "const char *" for(int i = 0; i< 5; i++) { wr_struc (list); if...
C++ тестирование менеджера памят Доброго времени суток всем, в универе дали ребяткам лабы: 1. Реализовать менеджер памяти с выделением блоков различного размера. 2. Реализовать менеджер памяти с перемещающимися блоками.... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
03.01.2016, 19:47
Вообще-то в арифметических выражениях нельзя вставлять старшие скобки внутрь младших.
В этом случае как-то так:
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>
#include <stack>
///////////////////////////////////////////////////////////////////////////////
typedef std::string             T_str;
typedef std::stack  < char  >   T_symb_stack;
///////////////////////////////////////////////////////////////////////////////
bool        great_bracket
    (
        char    L,
        char    R
    )
{
    T_str   res_str;
    res_str.push_back(L);
    res_str.push_back(R);
 
    return      res_str     ==  "{["
            ||  res_str     ==  "{("
            ||  res_str     ==  "[("
 
            ||  res_str     ==  " {"
            ||  res_str     ==  " ["
            ||  res_str     ==  " (";
}
///////////////////////////////////////////////////////////////////////////////
bool    eq_bracket
    (
        char    L,
        char    R
    )
{
    T_str   res_str;
    res_str.push_back(L);
    res_str.push_back(R);
 
    return      res_str     ==  "{}"
            ||  res_str     ==  "[]"
            ||  res_str     ==  "()";
}
///////////////////////////////////////////////////////////////////////////////
bool    brackets_are_correct( T_str     const   &   s )
{
    char    static  const   SPACE   =   ' ';
    T_symb_stack            symb_stack;
 
    symb_stack.push( SPACE );
 
    for     (
                auto    symb
                :
                s
            )
    {
        if  (
                great_bracket
                    (
                        symb_stack.top(),
                        symb
                    )
            )
        {
            symb_stack.push( symb );
        }
        else if     (
                        eq_bracket
                            (
                                 symb_stack.top(),
                                 symb
                            )
                    )
        {
            symb_stack.pop();
        }
        else
        {
            return  false;
        }
    }//for
 
    return      symb_stack.top  ()  ==  SPACE
            &&  symb_stack.size ()  ==  1;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    srand(unsigned(time(0)));
    T_str   brackets    =   "{}[]()";
 
    for(;;)
    {
        auto    str_len     =   rand() % 6 + 9;
        T_str   s( str_len, 0 );
 
        std::generate
            (
                s.begin     (),
                s.end       (),
 
                [=]
                {
                    return  brackets
                                [
                                    rand() % brackets.size()
                                ];
                }
            );
 
        if  (
                brackets_are_correct( s )
            )
        {
            std::cout   <<  s
                        <<  std::endl;
 
            system("pause");
        }
    }//for
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru