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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
08.07.2012, 23:28     Стек для обработки выражений со скобками #1
Используйте стек для обработки выражений со скобками. Встретив открывающую скобку, запомните ее положение. Встретив закрывающую скобку, после открывающей скобки, удалите элементы, включая открывающую скобку, и поместите полученное значение в стек, переместив таким образом заключенное в скобки выражение.
Помогите понять что требуется, чет я не догоняю.
Можно кодом, можно на словах.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 23:28     Стек для обработки выражений со скобками
Посмотрите здесь:

Стек на С (выражения со скобками) C++
C++ Простейший интерпретатор арифметических выражений со скобками
C++ Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Программа для вычисления выражений C++
C++ Создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
08.07.2012, 23:37     Стек для обработки выражений со скобками #2
Сделай связный список, элементами которого будут символы строки, на а дальше по заданию - удаения данных из списка
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
09.07.2012, 00:27  [ТС]     Стек для обработки выражений со скобками #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сделай связный список
стек на сколько я понял?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
удаения данных из списка
но как? есть же функция удаления только последнего элемента и возвращение только последнего
(или я что-то не так понял?)
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 00:29     Стек для обработки выражений со скобками #4
Цитата Сообщение от DaskOFF Посмотреть сообщение
но как? есть же функция удаления только последнего элемента и возвращение только последнего
(или я что-то не так понял?)
- из списка удаляй, по моему это просто, а очередь стека останется с тем же чередованием элементов(за исклчением выброшенных) что и до удаления.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 00:32     Стек для обработки выражений со скобками #5
условие - бред.
"удалите элементы, включая открывающую скобку, и поместите полученное значение..."
какое значение является результатом удаления? бредятина. спроси того, кто давал задание, пусть растолкует.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
09.07.2012, 00:40  [ТС]     Стек для обработки выражений со скобками #6
условие из книги липпмана
http://books.google.ru/books?id=sIrt...%D0%B8&f=false
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Стек для обработки выражений со скобками  
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 10:47     Стек для обработки выражений со скобками #8
Цитата Сообщение от DaskOFF Посмотреть сообщение
условие из книги липпмана
http://books.google.ru/books?id=sIrt...%D0%B8&f=false
какая глава (номер и название)?
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
09.07.2012, 17:42  [ТС]     Стек для обработки выражений со скобками #9
Цитата Сообщение от novi4ok Посмотреть сообщение
какая глава (номер и название)?
конец 9 главы , самая последняя задача 9,43 на 379 странице
novi4ok
549 / 502 / 8
Регистрация: 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.
если все еще не понял, что нужно сделать - скажи.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 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: то что я привел, это бред написанный переводчиками книги
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 22:42     Стек для обработки выражений со скобками #12
я понял насчет переводчика. попробую перевести, возможно, не слишком литературно, но смысл сохраню.

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

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

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

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

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

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


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

Разработать алгоритм и программу для удаления в заданном тексте части текста, взятого в скобки (вместе со скобками) C++
Калькулятор для расчета сложных выражений C++
C++ Парсер для математических выражений

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

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

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

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

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

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

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

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


насчет кода - проработай еще раз главу и справишься сам.
спасибо большое, завтра как раз до обеда учусь, по разбираюсь
Yandex
Объявления
09.07.2012, 23:20     Стек для обработки выражений со скобками
Ответ Создать тему
Опции темы

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