Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.01.2020
Сообщений: 7

Рекурсия: записать в vector все скобочные выражения

20.02.2020, 06:43. Показов 1471. Ответов 3
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, очень нужно помогите!
Есть формула например такая 12(123+12(2+34)) Нужно в vector записать все скобочные выражения.
То есть в vector должны лежать 123+12(2+34) и 2+34. При этом в каждой скобке может быть очень много скобок, например:
(()+()()+(()+()+(()+()))) и нужно записать ВСЕ скобочные выражения в vector <string>. Я так понимаю, что нужна рекурсия, но не получается её реализовать. Помогите пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2020, 06:43
Ответы с готовыми решениями:

Вывести все правильные скобочные выражения (оптимизировать алгоритм, ускорить работу кода)
есть код, нужно cout и cin перевести на printf и scanf дополнительных библиотек не подключать! проблема в том что при вводе 14 работает...

Вывести все правильные скобочные выражения длины N, состоящие из круглых и квадратных скобок
Здравствуйте! Решил данную задачу, но один тест не проходит по времени...Можно ли как-то оптимизировать данный код? Мое решение: ...

Вывести все правильные скобочные выражения длиной N, состоящие из круглых и квадратных скобок
Вывести все правильные скобочные выражения длиной N, состоящие из круглых и квадратных скобок. Технические условия Входные...

3
поисковый робот
 Аватар для cpp_user
30 / 23 / 9
Регистрация: 04.02.2020
Сообщений: 96
20.02.2020, 14:37
без рекурсии

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
int main()
{
    std::vector<std::string> v;
    std::string str = "12-(999*(88+22)-(123+12(2+34-(45-9)-(88+6))))";
    std::string  tmp = str;
 
    while (true)
    {
        auto i = tmp.find(')');
        if (i == std::string::npos)
            break;
 
        tmp[i] = ' ';
        std::string s;
        auto j = i - 1;
        while (tmp[j] != '(' && j >= 0)
        {
            s.insert(s.begin(), str[j]);
            j--;
        }
        tmp[j] = ' ';
        v.push_back(s);
    }
 
    for (auto& s : v)
        std::cout << s << std::endl;
}
1
0 / 0 / 0
Регистрация: 14.01.2020
Сообщений: 7
21.02.2020, 05:58  [ТС]
Знака * в формуле быть не может
При вводе некоторых скобочных последовательностей выводит ошибки. Например 12+123(14+13)
Ошибка: terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0)
Aborted
0
поисковый робот
 Аватар для cpp_user
30 / 23 / 9
Регистрация: 04.02.2020
Сообщений: 96
21.02.2020, 09:05
Ошибка:'std::out_of_range'
посмотрите исправил
"Знака * в формуле быть не может"
при чем тут знаки ? условие задачи "в vector записать все скобочные выражения", остальные проверки самостоятельно реализуйте пожалуйста.


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
int main()
{
    std::vector<std::string> v;
 
    std::string str = "12+123(14+13)";
    std::string  tmp = str;
    std::size_t i = 0;
 
    while ((i = tmp.find(')')) != std::string::npos)
    {       
        tmp[i] = ' ';   
        std::size_t j  = tmp.rfind('(', i - 1);
        if (j == std::string::npos)
            break;
 
        std::string s(str.begin() + j + 1, str.begin() + i);
 
        tmp[j] = ' ';
        v.push_back(s);
    }
 
    for (auto& s : v)
        std::cout << s << std::endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2020, 09:05
Помогаю со студенческими работами здесь

Найти все слова и записать их в vector<string>
Мне нужно найти слова в str и поместить их в str2( пробел = слово) vector&lt;string&gt; str = &quot;Я шел домой&quot;; vector&lt;string&gt;...

Как сложить два vector и записать в третий vector ?
Не получается сложить два вектора по элементно и записать в третий . Складываю уже переведенные числа из десятичной в восьмеричной системе...

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>>
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа, разделенные пробелами и запятыми: 1, 2, 3,...

Записать vector<vector<wchar_t>> в текстовый файл
Подскажите пожалуйста, как записать vector&lt;vector&lt;wchar_t&gt;&gt; в файл. Файл необходимо открывать через _wfopen. Пробую так, не получается....

Найти все значения выражения, ответ записать в алгебраической форме
Помогите с заданием: найти все значения (2−2i)2i ответ записать в алгебраической форме. Подскажите, где можно разобрать похожие задачи.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru