0 / 0 / 0
Регистрация: 05.06.2018
Сообщений: 3
1

Разделить один двусвязный список на два: со строчными и прописными символами

05.06.2018, 02:04. Показов 3437. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разбить двусвязный список, состоящий из N символов латинского алфавита, на 2 списка так, чтобы в одном списке находились строчные символы, другой - прописные
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2018, 02:04
Ответы с готовыми решениями:

Разделить один однонаправленный список на два: положительные и отрицательные элементы
Дан однонаправленный список, состоящий из целых чисел. Получить из этого списка два новых. Один...

Разделить список из строк на два: в один поместить строки, состоящие из одной буквы, в другой – все остальные
Разделить список из строк на два: в один поместить строки, состоящие из одной буквы, в другой – все...

Замена в текстовом файле строчных букв прописными, а прописных строчными
ребят! помогите решить задачку, мозг уже кипит! Разработать программу, обеспечивающую замену в...

Замена в текстовом файле строчных букв прописными, а прописных строчными
ребят как доделать программку:Разработать программу, обеспечивающую замену в текстовом файле...

1
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
08.06.2018, 12:49 2
Лучший ответ Сообщение было отмечено Snowboy932 как решение

Решение

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
 
//двусвязной список по простому
template<class T>
class tlist {
    struct node {
        node* prev;
        node* next;
        T val;
    };
private:
    node* h;
    node* t;
public:
    tlist(void):h(NULL), t(NULL){}
    ~tlist(){ clear();}
 
    typedef node* offset;
public:
    offset head(void){ return h; }
    offset tail(void){ return t; }
 
    //добавление в конец
    void add(const T& val){
        node* p = new node();
        p->prev = p->next = NULL;
        p->val  = val;
        if(h == NULL)
            h = t = p;
        else {
            p->prev = t;
            t = t->next = p;
        }
    }
 
    //удаление всех
    void clear(void){
        node* p;
        while(h != NULL){
            p = h;
            h = h->next;
            delete p;
        }
        t = NULL;
    }
 
    //разделение списка
    template<class Cmp>
    void split(tlist<T>& lst, Cmp cmp){
        lst.clear();
        node* h1 = NULL, *t1 = NULL;  
        node* i, *p = h;
 
        while(p != NULL){
            if(cmp(p->val)){
                i = p;
                if(p == h){
                    p = h = h->next;
                    if(h == NULL)
                        t = NULL;
                    else
                        h->prev = NULL;
                } else if(p == t){
                    p = t = t->prev;
                    if(t == NULL)
                        h = NULL;
                    else
                        t->next = NULL;
                } else {
                    p->prev->next = p->next;
                    p->next->prev = p->prev;
                    p = p->next;
                }
 
                if(h1 == NULL)
                    h1 = t1 = i;
                else {
                    i->prev = t1;
                    t1 = t1->next = i;
                }
 
            } else
                p = p->next;
        }
 
        if(h1 != NULL)
            h1->prev = NULL;
        if(t1 != NULL)
            t1->next = NULL;
 
        lst.h = h1;
        lst.t = t1;
    }
};
 
//функтор
struct c_cmp {
    bool operator () (char c) const { return (c >= 'A' && c <= 'Z'); }
};
 
//печать списка для проверки работы
template<class T>
void list_print(std::ostream& _out, tlist<T>& lst){
    _out << "head: ";
    for(tlist<T>::offset a = lst.head(); a != NULL; a = a->next)
        _out << a->val;
 
    _out << std::endl << "tail: ";
    for(tlist<T>::offset b = lst.tail(); b != NULL; b = b->prev)
        _out << b->val;
    std::cout << std::endl << std::endl;
}
 
int main(void){
    char s[] = "AaBbCDcdEeFfxXYZyPWSz";
 
    tlist<char> l1;
    for(unsigned i = 0; i < sizeof(s)/sizeof(s[0]) - 1; ++i)
        l1.add(s[i]);
 
    tlist<char> l2;
    l1.split(l2, c_cmp());
 
    list_print(std::cout, l1);
    list_print(std::cout, l2);
 
    l1.clear();
    l2.clear();
    std::cin.get();
    return 0;
}
0
08.06.2018, 12:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2018, 12:49
Помогаю со студенческими работами здесь

Замена в текстовом файле строчных букв прописными, а прописных строчными
Требование к программе: 1.Текст программы представлен в электронном виде и должен включать...

Определить являются ли числа строчными буквами русского алфавита или прописными
Создать проект для решения задачи: На экран выводить исходные данные и результаты. В работе...

Работа с текстовыми файлами. Преобразовать текст, записав ключевые слова прописными буквами, а остальные строчными
Доброго времени суток всем! Помогите пожалуйста решить задачу. В одном файле дан исходный текст...

Преобразовать текст, записав все зарезервированные слова прописными буквами, а остальные конструкции (имена и так далее) — строчными
Дан текст программы на каком-либо алгоритмическом языке и словарь зарезервированных слов этого...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru