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

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

Войти
Регистрация
Восстановить пароль
 
Tota_Luke
-3 / 0 / 0
Регистрация: 26.04.2011
Сообщений: 16
#1

Работа со стеками - C++

19.05.2011, 23:20. Просмотров 758. Ответов 6
Метки нет (Все метки)

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

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
19.05.2011, 23:58     Работа со стеками #2
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
#include <iostream>
#include <string>
#include <stack>
 
int main ()
{
    std::string main_string = "qwerewq";
 
    std::stack < char > char_stack_first;
    std::stack < char > char_stack_second;
 
    for (int index = 0; index < main_string.length() / 2; index++)
    {
        char_stack_first.push ( main_string [index] );
        char_stack_second.push( main_string [main_string.length() - index - 1] );
    }
 
    bool Checker = true;
    while ( ( !char_stack_first.empty() ) && ( Checker ) )
    {
        Checker = ( char_stack_first.top() == char_stack_second.top() );
        char_stack_first.pop();
        char_stack_second.pop();
    }
 
    std::cout << Checker << std::endl;
 
    std::cin.get();
    return 0;
}
Добавлено через 8 минут
Насчет точки: будем считать, что я ее заранее удалил, дабы просто работать с предложением...

Добавлено через 12 минут
Цитата Сообщение от Tota_Luke Посмотреть сообщение
Эту задачу рекомендуется решать с помощью двух стеков. В первый стек следует поместить весь текст, затем во второй стек перенести его половину так, чтобы последний символ текста находился на дне стека.
Нахожу здесь лишним заполнять один из стеков всем текстом, потому что одна из половин будет просто лишней. Достаточно заполнять стек с двух концов до середины, а потом поэлементно вытаскивать из двух контейнеров первые символы и их сравнивать...
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
20.05.2011, 01:03     Работа со стеками #3
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
#include <iostream>
#include <string>
#include <stack>
#include <vector>
 
int main ()
{
      std::string main_string = "qwerewq";
      std::stack<char,std::vector<char> > first(std::vector<char> (main_string.begin(),main_string.end ()));
      std::stack < char > second;
      int temp= first.size()/2;
      for (int index = 0; index < temp; index++)      {
        second.push ( first.top() );
        first.pop();
      }
 
      bool Checker = true;
      while ( ( !second.empty() ) && ( Checker ) )
      {
        Checker = (first.top() == second.top() );
        first.pop();
        second.pop();
      }
 
     std::cout << Checker << std::endl;
 
     std::cin.get();
     return 0;
}
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
20.05.2011, 01:30     Работа со стеками #4
Цитата Сообщение от Mиxaил Посмотреть сообщение
Нахожу здесь лишним заполнять один из стеков всем текстом, потому что одна из половин будет просто лишней. Достаточно заполнять стек с двух концов до середины, а потом поэлементно вытаскивать из двух контейнеров первые символы и их сравнивать...
А я нахожу, что эту задачу надо решать исходя из того, что к тексту возможен только последовательный доступ, и длина его заранее не известна.

Добавлено через 5 минут
Мдя, оба приведенных "решения" демонстрируют только известный принцип - лишние знания дураку только вредят
Tota_Luke
-3 / 0 / 0
Регистрация: 26.04.2011
Сообщений: 16
20.05.2011, 11:04  [ТС]     Работа со стеками #5
Спс ребят, можете добавить коменты к строкам в ваших кодах, ато многое для меня не понятно...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.05.2011, 11:13     Работа со стеками #6
Цитата Сообщение от Tota_Luke
В первый стек следует поместить весь текст, затем во второй стек перенести его половину так, чтобы последний символ текста находился на дне стека.
вместо первого стека записать в массив, поставить указатели на начало и конец массива
двигать их к центру текста и сравнивать значения
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
20.05.2011, 13:15     Работа со стеками #7
C++
1
2
3
4
5
6
7
8
9
      //инициализируем стек строкой main_string и объявляем второйпустой стек
      std::stack<char,std::vector<char> > first(std::vector<char> (main_string.begin(),main_string.end ()));
      //....  
      //Запихиваем во второй стек значения из первого, как и надо по заданию. Первый тем самым уменьшается
      int temp= first.size()/2;
      //....  
      //сравниваем стеки поэлементно   
      bool Checker = true;
      //....
Yandex
Объявления
20.05.2011, 13:15     Работа со стеками
Ответ Создать тему
Опции темы

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