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

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
egorlp
5 / 5 / 1
Регистрация: 09.05.2010
Сообщений: 43
11.12.2010, 17:14     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком #1
здравствуйте. помогите разобраться с данной задачей.

Даны натуральное число n, символы S1,S2,...,Sn. будем рассматривать слова, образованные входящими в последовательность символами. Если общее количество слов больше единицы и нечетно, то удалить первое слово. Затем последовательность должна быть отредактирована следующим образом. Должны быть удалены группы пробелов, которыми начинается и заканчивается последовательность, а каждая внутрення группа пробелов должна быть заменена одним пробелом
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2010, 17:14     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
Посмотрите здесь:

C++ Стандартная библиотека шаблонов (STL)
C++ Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
C++ Стандартная библиотека C++ и STL
C++ Бинарное дерево, стандартная библиотека шаблонов (STL)
C++ Организация шаблонов на языке С++, библиотека STL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.12.2010, 22:10     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком #2
И при чем тут list?

Вот код, который разбивает предложение на слова и помещает найденные слова в список l.
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
#include <string>
#include <list>
#include <iostream>
 
using namespace std;
 
int main()
{
        string data = ";I wish I , were a fish in; the biggest ocean.";
        string separators = " ;.,-";
        list<string> l;
 
        size_t i=0, j=0;
 
        cout << data << endl;
 
        while (data.length())
        {
                j = data.find_first_not_of(separators);
                if ((j!=string::npos) && (j!=0))
                {
                        data.erase(0, j);
                }
                j = data.find_first_of(separators);
                if ((j!=string::npos) && (j!=0))
                {
                        l.push_back(data.substr(0, j));
                        data.erase(0, j);
                }
                else
                        break;
        }
 
        for (auto i=l.begin(); i!=l.end(); i++)
                cout << *i << " ";
        cout << endl;
 
        return 0;
}
egorlp
5 / 5 / 1
Регистрация: 09.05.2010
Сообщений: 43
13.12.2010, 16:22  [ТС]     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком #3
Простите что недописал, были проблемы с компьютером, в общем нам нужно Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком выполнить даную задачу.

Добавлено через 6 часов 39 минут
И насколько я понимаю в этой задаче нужно вводить символы с клавиатуры и я так понял вот задача наподобии моей, вот только я непойму как считать это количество пробелов и потом их удалить.

Добавлено через 7 часов 3 минуты
если можете, помогите пожалуйста.

Добавлено через 16 часов 45 минут
тема актуальна и нуждается в помощи.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.12.2010, 19:10     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком #4
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 <sstream>
#include <list>
#include <algorithm>
#include <iterator>
 
int main(){
    std::string buf;
    
    std::cout << "String: ";
    std::getline(std::cin, buf);
    if ( buf.empty() ){
        std::cerr << "Empty string!" << std::endl;
        return 1;
    }
    
    std::istringstream ist(buf);
    std::list<std::string> list;
    std::copy(std::istream_iterator<std::string>(ist), std::istream_iterator<std::string>(), std::back_inserter(list));
    if ( ( list.size() > 1 ) && ( list.size() & 1 ) )
        list.erase(list.begin());
    
    std::cout << "Result: ";
    std::copy(list.begin(), list.end(), std::ostream_iterator<std::string>(std::cout, " "));
    
    std::cout << std::endl;
    return 0;
}
egorlp
5 / 5 / 1
Регистрация: 09.05.2010
Сообщений: 43
19.12.2010, 00:29  [ТС]     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком #5
а можно ли это организовать используя шаблон, написанный пользователем?

Добавлено через 5 часов 41 минуту
прошу прощения, уважаемые пользователи за то, что запутал данной темой. Вот что нужно сделать: Написать самому шаблон для работы со списком. И выполнить то условие. Благодарю за ваше внимание.

Добавлено через 16 часов 18 минут
тема все еще актуальна

Добавлено через 4 часа 34 минуты
очень актуальна

Добавлено через 5 часов 59 минут
если можете помогите пожалуйста, ато последняя лаба осталась на этом С++ и такая запара с ней.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.12.2010, 06:13     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком #6
А самому попробовать сделать - не судьба? На форуме можно найти что-то подобное, переделать немного под свою задачу. Правильно, не правильно - не важно. Неудачная попытка - всё-таки не выпрашивание готового решения...
Вот Вам ваша задача, разберитесь хотябы самостоятельно:
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
#include <iostream>
#include <string>
#include <sstream>
 
template <typename T>
class Queue {
    struct Node {
        T val;
        Node * next;
        Node(const T & _val) : val(_val), next(0) {}
    };
 
    Node * first;
    Node * last;
    size_t cnt;
 
    Queue(const Queue & another);
 
public:
    Queue() : first(0), last(0), cnt(0) {}
    ~Queue(){
        while ( first ){
            last = first->next;
            delete first;
            first = last;
        }
    }
    bool empty() const { return ! cnt; }
    size_t size() const { return cnt; }
    void enque(const T & _val){
        Node * n = new Node(_val);
        if ( ! first )
            first = n;
        else
            last->next = n;
        last = n;
        ++cnt;
    }
    T deque(){
        if ( empty() )
            throw ( std::string("Empty queue!") );
        T _val = first->val;
        Node * _next = first->next;
        delete first;
        first = _next;
        --cnt;
        return _val;
    }
};
 
template <typename T>
std::istream & operator >> (std::istream & ist, Queue<T> & q){
    T _val;
 
    ist >> _val;
    if ( ! ist.fail() )
        q.enque(_val);
    return ist;
}
 
template <typename T>
std::ostream & operator << (std::ostream & ost, Queue<T> & q){
    T _val;
    try {
        _val = q.deque();
        ost << _val;
    }
    catch ( std::string e ){
        std::cerr << e << std::endl;
    }
    return ost;
}
 
 
int main(){
    std::string buf;
 
    std::cout << "String: ";
    std::getline(std::cin, buf);
    if ( buf.empty() ){
        std::cerr << "Empty string!\n" << std::endl;
        return 1;
    }
    std::istringstream ist(buf);
    Queue<std::string> q;
    while ( ist >> q )
        ;
 
    if ( q.empty() ){
        std::cerr << "Empty queue!" << std::endl;
        return 1;
    }
 
    if ( ( q.size() > 1 ) && ( q.size() & 1 ) )
        q.deque();
 
 
    std::ostringstream ost;
    while ( ! q.empty() )
        ost << q << ' ';
 
    buf = ost.str();
    buf.erase(buf.size() - 1);
    std::cout << "Result: \"" << buf << "\"" << std::endl;
 
    return 0;
}
Yandex
Объявления
19.12.2010, 06:13     Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
Ответ Создать тему
Опции темы

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