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

Реализация стека/очереди для выдачи номеров пар скобок в тексте - C++

Восстановить пароль Регистрация
 
Kvayzer
0 / 0 / 1
Регистрация: 30.12.2013
Сообщений: 56
05.11.2015, 08:45     Реализация стека/очереди для выдачи номеров пар скобок в тексте #1
Используя очередь или стек, решить задачу: в файле записан текст, сбалансированный по круглым скобкам. Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров по возрастанию номеров позиций:
а) закрывающих скобок;
(например, для текста a+(45-f(x)*(b-c)) надо напечатать: 8 10; 12 16; 3 17)
б) открывающих скобок.
(например, для текста a+(45-f(x)*(b-c)) надо напечатать: 3 17; 8 10; 12 16)
Пункт а я решил: добавляем номер символа в стек, если встретился символ "(", когда встречаем ")", то печатаем элемент стека (номер открывающей скобки) и просто наш счётчик, который идёт по-символьно. Далее удаляем из стека этот номер скобки. Если встречаем снова ")", но печатаем снова элемент стека (номер открывающей скобки) и наш счётчик (номер закрывающей скобки).

А как реализовать второй пункт? Когда нам вначале нужно вывести номера внешних скобок, а потом внутренние (пункт б)?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2015, 08:45     Реализация стека/очереди для выдачи номеров пар скобок в тексте
Посмотрите здесь:

Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар C++
C++ Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар.
C++ Программа для поиска в тексте номеров телефона
C++ Простейшая реализация стека и очереди
Для каждой пары скобок в строке напечатать номер и их позиции в тексте (используя стек) C++
C++ Создание стека С++ и реализация основных для него функций
Что вернет стековая функция разбора пар скобок? C++
Что вернет стековая функция разбора пар скобок? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Epicus
15 / 15 / 10
Регистрация: 25.04.2014
Сообщений: 39
05.11.2015, 10:42     Реализация стека/очереди для выдачи номеров пар скобок в тексте #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
б) открывающих скобок.
(например, для текста a+(45-f(x)*(b-c)) надо напечатать: 3 17; 8 10; 12 16)
Ну тут есть несложное решение через список, но если строго требуется использовать только очереди или стеки, то можно сделать так:

Берем стек позиций открывающихся скобок и стек обычных строк.

Идем по входной строке, записываем в первый стек все открывающиеся скобки. Если встречаем закрывающуюся, то берем открывающуюся из стека и записываем их пару в строку (sprintf, например) и так, пока не закончится входная строка или не встретим новую открывающуюся скобку. В последнем случае закрываем предыдущую строку в стеке и создаем новую, пишем теперь в нее.
Ну и так далее. Вот пример (строка, только из скобок, нумерация с 1):

( ( ) ( ( ( ) ) ) )

1.
> Первый стек пустой
> Второй стек пустой

2.
> 1, 2
>

3.
> 1, 4, 5, 6
> "(2, 3)"

4.
> 1
> "(2, 3)", "(4, 9) (5, 8) (6, 7)"

5.
>
> "(2, 3)", "(4, 9) (5, 8) (6, 7)", "(1, 10)"

Распечатываем стек строк:
(1, 10), (4, 9), (5, 8), (6, 7), (2, 3)
Yandex
Объявления
05.11.2015, 10:42     Реализация стека/очереди для выдачи номеров пар скобок в тексте
Ответ Создать тему
Опции темы

Текущее время: 13:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru