Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
1

Стек для обработки выражений со скобками

08.07.2012, 23:28. Просмотров 1524. Ответов 12
Метки нет (Все метки)

Используйте стек для обработки выражений со скобками. Встретив открывающую скобку, запомните ее положение. Встретив закрывающую скобку, после открывающей скобки, удалите элементы, включая открывающую скобку, и поместите полученное значение в стек, переместив таким образом заключенное в скобки выражение.
Помогите понять что требуется, чет я не догоняю.
Можно кодом, можно на словах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 23:28
Ответы с готовыми решениями:

Простейший интерпретатор арифметических выражений со скобками
Никто не знает где можно найти исходник или хотя бы алгоритм такой программы?...

Стек на С (выражения со скобками)
Всем привет, очень нужно решить задачу. Вводится стек, выражение типа...

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

Написать парсер математических выражений с функцией упрощения этих выражений
Люди, здравствуйте. Есть такая задача: написать упроститель выражений. На...

Разработать алгоритм и программу для удаления в заданном тексте части текста, взятого в скобки (вместе со скобками)
Разработать алгоритм и программу для удаления в заданном тексте части текста,...

12
-=ЮрА=-
Заблокирован
Автор FAQ
08.07.2012, 23:37 2
Сделай связный список, элементами которого будут символы строки, на а дальше по заданию - удаения данных из списка
0
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 00:27  [ТС] 3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сделай связный список
стек на сколько я понял?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
удаения данных из списка
но как? есть же функция удаления только последнего элемента и возвращение только последнего
(или я что-то не так понял?)
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 00:29 4
Цитата Сообщение от DaskOFF Посмотреть сообщение
но как? есть же функция удаления только последнего элемента и возвращение только последнего
(или я что-то не так понял?)
- из списка удаляй, по моему это просто, а очередь стека останется с тем же чередованием элементов(за исклчением выброшенных) что и до удаления.
1
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 00:32 5
условие - бред.
"удалите элементы, включая открывающую скобку, и поместите полученное значение..."
какое значение является результатом удаления? бредятина. спроси того, кто давал задание, пусть растолкует.
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 00:40  [ТС] 6
условие из книги липпмана
http://books.google.ru/books?id=sIrt...%D0%B8&f=false
0
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 01:06 7
DaskOFF, вот твой код, доработай его немного для скобки
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
#include <iostream>
using namespace std;
 
struct Node
{
    char chr;
    Node * next;
    Node * prev;
};
 
class Stack
{
private:
    Node * pFirst;
    Node * pList;
    Node * pLast;
public:
    Stack();
    void Init(char * str);
    void Set(char ch);
    char Get();
    void Rem(char ch);
    void See();
};
 
int main()
{
    char chr = 0;//Символ для удаления
    char str[256];
    cout<<"Enter string : ";
    cin.getline(str,255);
    Stack stack;
    stack.Init(str);//Инициализируем стек
    //Печатаем стек
    stack.See();
    cout<<"Enter char   : ";cin>>chr;
    //Удаляем из списка символ chr
    stack.Rem(chr);
    //Печатаем стек
    stack.See();
    system("pause");
    return 0;
}
 
Stack::Stack()
{
    pFirst = new Node;
    pFirst->prev = NULL;
    pFirst->next = NULL;
    pLast = (pList = pFirst);
}
 
void Stack::Init(char * str)
{
    pFirst->chr = str[0];
    pLast = (pList = pFirst);
    for(int i = 1; str[i] != '\0'; i++)
        Set(str[i]);
}
 
void Stack::Set(char ch)
{
    pLast->next = new Node;
    pList = pLast->next;
    pList->prev = pLast;
    pList->chr  = ch;
    pLast = pList;
    pLast->next = NULL;
}
 
char Stack::Get()
{
    return pLast->chr;
}
 
void Stack::Rem(char ch)
{
    for(pList = pFirst; pList != NULL; pList = pList->next)
    {
        if(pList->chr == ch)
        {
            if(pList->next)//Не последний элемент
            {
                if(pList->prev)//Не первый элемент
                {
                    pLast = pList->next;
                    pList->prev->next = pLast;
                    pLast->prev = pList->prev;
                }
                else
                {
                    pFirst = pList->next;//Первый элемент
                    pFirst->prev = NULL;
                }
            }
            else//Последний элемент
                pLast = pList->prev;
        }
    }
    pLast->next = NULL;
}
 
void Stack::See()
{
    //Показываем стековые данные
    for(pList = pLast; pList != NULL; pList = pList->prev)
        cout<<pList->chr;
    cout<<endl;
}
1
Миниатюры
Стек для обработки выражений со скобками  
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 10:47 8
Цитата Сообщение от DaskOFF Посмотреть сообщение
условие из книги липпмана
http://books.google.ru/books?id=sIrt...%D0%B8&f=false
какая глава (номер и название)?
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 17:42  [ТС] 9
Цитата Сообщение от novi4ok Посмотреть сообщение
какая глава (номер и название)?
конец 9 главы , самая последняя задача 9,43 на 379 странице
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 21:48 10
спросил название главы потому что не уверен, что у нас с тобой в руках одно и то же издание. точнее, уверен, что разные.
так как глава называется? "последовательные контейнеры" или что-то похожее?

кажется, нашел твою задачу:

Exercise
9.43:
Use a stack to process parenthesized expressions. When you see
an open parenthesis, note that it was seen. When you see a
close parenthesis after an open parenthesis, pop elements down
to and including the open parenthesis off the stack . push a
value onto the stack to indicate that a parenthesized expression
was replaced.

все вроде ясно, а то, что ты привел - бред.

Добавлено через 1 час 6 минут
причем решение ожидается не какое-нибудь, а на основе изложенного в главе материала, т.е. использовать нужно stl stack-adapter.
если все еще не понял, что нужно сделать - скажи.
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 22:20  [ТС] 11
Цитата Сообщение от novi4ok Посмотреть сообщение
спросил название главы потому что не уверен, что у нас с тобой в руках одно и то же издание. точнее, уверен, что разные.
так как глава называется? "последовательные контейнеры" или что-то похожее?

кажется, нашел твою задачу:

Exercise
9.43:
Use a stack to process parenthesized expressions. When you see
an open parenthesis, note that it was seen. When you see a
close parenthesis after an open parenthesis, pop elements down
to and including the open parenthesis off the stack . push a
value onto the stack to indicate that a parenthesized expression
was replaced.

все вроде ясно, а то, что ты привел - бред.

Добавлено через 1 час 6 минут
причем решение ожидается не какое-нибудь, а на основе изложенного в главе материала, т.е. использовать нужно stl stack-adapter.
если все еще не понял, что нужно сделать - скажи.
я плохо знаю английский, если не сложно (если задания сильно отличаются) можете перевести может пойму, но если возможно помогите кодом чтобы я понял

PS: то что я привел, это бред написанный переводчиками книги
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 22:42 12
я понял насчет переводчика. попробую перевести, возможно, не слишком литературно, но смысл сохраню.

используйте stack для обработки выражений, заключенных в скобки. встретив открывающую скобку, запомните этот факт. встретив закрывающую скобку после открывающей, вытолкните из stack все элементы, включая открывающую скобку. затолкайте в stack значение (любое, типа "метки". прим. мое), чтобы пометить, что выражение в скобках замещено (твоей "меткой". прим мое).

т.е. у тебя - строчка такого вида:

фждвылоажфдывло жфдло (жфдло(пдфыфджваождфы)ф) жфдло (фждло) жфдло

допустим, "метка" выглядит так:

***
после обработки ты должен получить строчку:

фждвылоажфдывло жфдло (жфдло***ф) жфдло *** жфдло


насчет кода - проработай еще раз главу и справишься сам.
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 23:20  [ТС] 13
Цитата Сообщение от novi4ok Посмотреть сообщение
я понял насчет переводчика. попробую перевести, возможно, не слишком литературно, но смысл сохраню.

используйте stack для обработки выражений, заключенных в скобки. встретив открывающую скобку, запомните этот факт. встретив закрывающую скобку после открывающей, вытолкните из stack все элементы, включая открывающую скобку. затолкайте в stack значение (любое, типа "метки". прим. мое), чтобы пометить, что выражение в скобках замещено (твоей "меткой". прим мое).

т.е. у тебя - строчка такого вида:

фждвылоажфдывло жфдло (жфдло(пдфыфджваождфы)ф) жфдло (фждло) жфдло

допустим, "метка" выглядит так:

***
после обработки ты должен получить строчку:

фждвылоажфдывло жфдло (жфдло***ф) жфдло *** жфдло


насчет кода - проработай еще раз главу и справишься сам.
спасибо большое, завтра как раз до обеда учусь, по разбираюсь
0
09.07.2012, 23:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 23:20

Используя стек, описать функцию проверяющую, является ли стек пустым
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя...

Парсер для математических выражений
Здравствуйте уважаемые товарищи форумчане. Я пишу интерпретатор математических...


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

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

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