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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kvayzer
0 / 0 / 1
Регистрация: 30.12.2013
Сообщений: 56
#1

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

05.11.2015, 08:45. Просмотров 468. Ответов 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++
Имеется пример реализации стека: #include <cstdlib> #include <iostream> using namespace std; class Stack { private: ...

Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар - C++
помогите пожалуйста решить Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое...

Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар. - C++
Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар. #include<stdio.h> ...

Программа для поиска в тексте номеров телефона - C++
Пожалуйста дорогие и умные программисты, помогите юзверю написать программу на C++: ввести с клавиатуры последовательность символов,...

Создание стека С++ и реализация основных для него функций - C++
Доброго времени суток.Нужна консольная программа,которая создаст стек с элементом-символьной строкой,и будет поддерживать функции...

Для каждой пары скобок в строке напечатать номер и их позиции в тексте (используя стек) - C++
Для каждой пары скобок напечатать номер и их позиции в тексте. Используя стек. Использовать динамическое распределение памяти. пример: ...

Что вернет стековая функция разбора пар скобок? - C++
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр такую строку: ((х-((1/х)+у-4)*(z/4+(2-x*3)) Рассмотреть...

Что вернет стековая функция разбора пар скобок? - C++
Что вернет функция, если она принимает как параметр такую строку: (5*(x/(y*5))*z)+((1/7)*z*2)-x С точки зрения логики стека.

Нужны примеры двусвязного списка,очереди или стека - C++
Здравствуйте, мне нужны примеры создания стеков,очереди (дек) с двусвязными списками. Напишите пожалуйста код для таких классов.

Использование стека. Дана строка символов. Проверьте правильность расстановки в ней круглых скобок. - C++
Использую пример программы от сюда: http://www.intuit.ru/department/algorithms/staldata/30/1.html Пример 1. Дана строка символов....

Подсчет скобок в тексте - 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)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru