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

Стек + Строки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 16:53     Стек + Строки #1
Всем доброго дня) Вопрос таков подскажите плиз как в стек засунуть слово? то есть массив char, задание состоит в том чтобы определить является ли слово полиндромом используя два стека. # include <stack> пользоваться нельзя =)

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
//добавление нового элемента в вершину стека, в качестве второго параметра я думаю передаём массив
void Push(StackItem *&S_Top, char elem [])
{
    StackItem *p = new StackItem;
    //strcpy_s (p -> elem, elem); стоит ли использовать эту функцию или как?
    p -> Polind = elem;
    p -> Next = S_Top;
    S_Top = p;
}
 
//чтение без удаления элемента из вершины стека;
int Top(StackItem *S_Top)
{
    if (S_Top != NULL)
    {
        return S_Top -> Polind;
    }
    return -1;
}
 
//удаление элемента из вершины стека
int  Pop(StackItem *&S_Top) 
{
    char Polindrom;
    if (S_Top == NULL)
    {
        return -1;
    }
    StackItem *p = S_Top;
    Polindrom = p -> Polindrom;
    S_Top = S_Top -> Next;
    delete p;
    return Polindrom;
}
 
//возвращает истину, если стек пуст
bool IsEmpty(StackItem *S_Top) 
{
    return S_Top == NULL;
}
 
//печатает на экран содержимое стека
void Print(StackItem *S_Top)
{
    for (StackItem *p = S_Top; p; p = p -> Next)
    {
        cout << p -> Polind << " ";
    }
    cout << endl;
}
Добавлено через 10 минут
C++
1
2
3
char Polindrom [MAX];
cout << "Введите слово: "; cin.get(); cin.getline (Polindrom, sizeof (Polindrom));
Push (S_Top, Polindrom);
вот так передавать или как, кто знает плиз помогите?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2011, 16:53     Стек + Строки
Посмотрите здесь:

C++ Строки и стек
C++ при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
C++ Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Добавление строки в стек C++
Используя стек напечатать содержимое текстового файла, выписывая символы каждой его строки в обратном порядке. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dyosick
 Аватар для dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
25.03.2011, 17:09     Стек + Строки #2
Ты лучше объясни следующее:

1.Зачем два стека (или зачем для этой задачи вообще стек)?
2.Если все же стек нужен, то ты пытаешься реализовать его сам?Т.е. для чего (для какого класса) все эти функии?
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 17:16  [ТС]     Стек + Строки #3
1) Два стека, потому что задание такое =)
2) Все эти функции это возможные действия над стеком! это те же функции которые используются в <stack> просто тут их надо самому реализовать, что я и сделал)

тут по идее алгоритм такой: в один стек мы засовываем слово, потом по очереди выталкиваем верхний элемент, то есть букву слова, и засовываем во второй стек и у нас получается во втором стеке слово наоборот и потом сравнить стеки и посмотреть является ли слово полиндромом =) я понял так)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2011, 17:21     Стек + Строки #4
pusser,
потом по очереди выталкиваем верхний элемент
Угу. А потом сравниваем стеки. А ничего так, что после Top, Pop до конца первого стека в нем уже ничего не останется?
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 17:23  [ТС]     Стек + Строки #5
блин точно...(
dyosick
 Аватар для dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
25.03.2011, 17:26     Стек + Строки #6
Так элемент стека - символ или целая строка?
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 17:29  [ТС]     Стек + Строки #7
Я считаю что должен быть символ, т.к. надо же потом работать со стеком по элементам, вытолкнуть слово в обратном порядке.

вот так звучит задание : Используя два стека символов определить, является ли заданная строка палиндромом.
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 17:43  [ТС]     Стек + Строки #8
Кто нить помогите плиз как засунуть слово в стек (( как то реализовать эт всё надо (
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2011, 17:54     Стек + Строки #9
Конечно идиотизм, писать буду с использованием стандартного класса (перепишешь сам).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <stack>
 
int main()
{
    std::string str;
    std::cin>>str;
 
    std::stack<char> stck1;
    std::stack<char> stck2;
 
    for(std::string::const_iterator iter=str.begin(); iter != str.end(); ++iter)
        stck1.push(*iter);
    for(std::string::const_reverse_iterator riter=str.rbegin(); riter != str.rend(); ++riter)
        stck2.push(*riter);
    std::cout<<"String "<< str << ((stck1 == stck2) ? " is " : " is not ") << "palindrom\n";
    return 0;
}
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 17:58  [ТС]     Стек + Строки #10
Так это и я бы написал =) со STL делать тут нечего) а пользоваться нельзя =(
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2011, 17:59     Стек + Строки #11
pusser, А в чем проблема сделать-то такое же без STL?
pusser
 Аватар для pusser
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 77
25.03.2011, 18:31  [ТС]     Стек + Строки #12
может будут у кого то идеи как это сделать без STL ??

Добавлено через 9 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
pusser, А в чем проблема сделать-то такое же без STL?
как передавать слово в функцию?
C++
1
2
3
4
5
6
7
8
void Push(StackItem *&S_Top, char elem [])
{
    StackItem *p = new StackItem;
    //strcpy_s (p -> elem, elem);
    p -> Polind = elem;
    p -> Next = S_Top;
    S_Top = p;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.03.2011, 18:34     Стек + Строки #13
Как вариант кстати.

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
#include <iostream>
#include <string>
#include <stack>
 
template<class Type>
class Stack
{
public:
    typedef Type value_type;
    typedef size_t size_type;
private:
    struct Node
    {
        Node(const value_type& val):value(val), next(0)
        {
        }
        Node* next;
        value_type value;
    };
public:
    Stack():head(0), sz(0)
    {
    }
    ~Stack()
    {
        clear();
    }
    bool clear()
    {
        while(head)
        {
            Node* tmp=head;
            head=head->next;
            delete tmp;
        }
        return true;
    }
    size_type size() const {return sz;}
    bool push(const value_type& val)
    {
        Node* tmp=new Node(val);
        if(!head)
        {
            head=tmp;
            ++sz;
            return true;
        }
        tmp->next=head;
        head=tmp;
        ++sz;
        return true;
    }
    bool pop()
    {
        if(empty())
            return false;
        Node* tmp=head;
        head=head->next;
        delete tmp;
        --sz;
        return true;
    }
    value_type& top() const
    {
        return head->value;
    }
    bool empty()
    {
        return sz == 0;
    }
    bool operator ==(const Stack& first) const
    {
                      if(sz != first.sz)
                           return false;
        Node* tmp=head;
        Node* tmp2=first.head;
        for(; tmp; tmp=tmp->next, tmp2=tmp2->next)
            if(tmp->value != tmp2->value)
                return false;
        return true;
    }
    Node* getHead() const {return head;}
private:
    Node* head;
    size_type sz;
};
 
int main()
{
    Stack<char> stck1;
    Stack<char> stck2;
    const int max=20;
    char Array[max];
    std::cin.getline(Array, max);
    int size=strlen(Array);
    for(int i=0; i<size; ++i)
        stck1.push(Array[i]);
    for(int i=size-1; i >= 0; --i)
        stck2.push(Array[i]);
    std::cout<<"String "<< Array << ((stck1 == stck2) ? " is " : " is not ")<<"palindrom\n";
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2011, 18:52     Стек + Строки
Еще ссылки по теме:

C++ Реализовать класс стек, хранящий в себе строки
Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? C++
C++ Из строки извлечь символы операций в стек, а цифры - в другую строку

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
25.03.2011, 18:52     Стек + Строки #14
В стек не нужно помещать слова, в стек нужно помещать отдельные символы.

Добавлено через 1 минуту
Зачем два стека я тоже не понял.
Yandex
Объявления
25.03.2011, 18:52     Стек + Строки
Ответ Создать тему
Опции темы

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