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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
#1

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

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

Используйте стек для обработки выражений со скобками. Встретив открывающую скобку, запомните ее положение. Встретив закрывающую скобку, после открывающей скобки, удалите элементы, включая открывающую скобку, и поместите полученное значение в стек, переместив таким образом заключенное в скобки выражение.
Помогите понять что требуется, чет я не догоняю.
Можно кодом, можно на словах.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 23:28     Стек для обработки выражений со скобками
Посмотрите здесь:
C++ Простейший интерпретатор арифметических выражений со скобками
Стек на С (выражения со скобками) C++
Написать парсер математических выражений с функцией упрощения этих выражений C++
Разработать алгоритм и программу для удаления в заданном тексте части текста, взятого в скобки (вместе со скобками) C++
Программа для вычисления выражений C++
C++ Парсер для математических выражений
Калькулятор для расчета сложных выражений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
08.07.2012, 23:37     Стек для обработки выражений со скобками #2
Сделай связный список, элементами которого будут символы строки, на а дальше по заданию - удаения данных из списка
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 00:27  [ТС]     Стек для обработки выражений со скобками #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сделай связный список
стек на сколько я понял?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
удаения данных из списка
но как? есть же функция удаления только последнего элемента и возвращение только последнего
(или я что-то не так понял?)
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 00:29     Стек для обработки выражений со скобками #4
Цитата Сообщение от DaskOFF Посмотреть сообщение
но как? есть же функция удаления только последнего элемента и возвращение только последнего
(или я что-то не так понял?)
- из списка удаляй, по моему это просто, а очередь стека останется с тем же чередованием элементов(за исклчением выброшенных) что и до удаления.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.07.2012, 00:32     Стек для обработки выражений со скобками #5
условие - бред.
"удалите элементы, включая открывающую скобку, и поместите полученное значение..."
какое значение является результатом удаления? бредятина. спроси того, кто давал задание, пусть растолкует.
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 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
551 / 504 / 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
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
09.07.2012, 17:42  [ТС]     Стек для обработки выражений со скобками #9
Цитата Сообщение от novi4ok Посмотреть сообщение
какая глава (номер и название)?
конец 9 главы , самая последняя задача 9,43 на 379 странице
novi4ok
551 / 504 / 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
112 / 112 / 9
Регистрация: 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: то что я привел, это бред написанный переводчиками книги
novi4ok
551 / 504 / 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++ string для решения мат.выражений
Разработать программу для вычисления логических выражений C++
Написать программу для решения сложных выражений. C++
C++ написать универсальную функцию для вычисления выражений
C++ Напишите грамматику для описания логических выражений

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

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

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

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

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

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

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

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


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

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