Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Kvayzer
0 / 0 / 2
Регистрация: 30.12.2013
Сообщений: 56
#1

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

05.11.2015, 08:45. Просмотров 665. Ответов 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)
Пункт а я решил: добавляем номер символа в стек, если встретился символ "(", когда встречаем ")", то печатаем элемент стека (номер открывающей скобки) и просто наш счётчик, который идёт по-символьно. Далее удаляем из стека этот номер скобки. Если встречаем снова ")", но печатаем снова элемент стека (номер открывающей скобки) и наш счётчик (номер закрывающей скобки).

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

Простейшая реализация стека и очереди
Имеется пример реализации стека: #include <cstdlib> #include <iostream>...

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

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

Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок
Вывести все корректные комбинации пар круглых скобок, которые можно...

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

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

1
Epicus
15 / 15 / 11
Регистрация: 25.04.2014
Сообщений: 39
05.11.2015, 10:42 #2
Лучший ответ Сообщение было отмечено Kvayzer как решение

Решение

б) открывающих скобок.
(например, для текста 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)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2015, 10:42
Привет! Вот еще темы с решениями:

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

Что вернет стековая функция разбора пар скобок?
Что вернет функция, если она принимает как параметр такую строку:...

Вывести все корректные комбинации пар круглых скобок
Вывести все корректные комбинации пар круглых скобок, которые можно...

Что вернет стековая функция разбора пар скобок?
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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