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

списки - C++

Восстановить пароль Регистрация
 
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
26.12.2011, 21:46     списки #1
организуйте помещение вводимых символов в список, пока не будет достигнут конец входного потока. Затем переместить буквы из исходного списка списка в отдельный список букв, цифры-в список цифр, а остальные символы - в третий список. Вывести списки

помогите,пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 21:46     списки
Посмотрите здесь:

C++ списки С++
C++ C++ списки
C++ Списки в С++
Списки C++
списки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.12.2011, 01:25     списки #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
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
#include <iostream>
#include <cctype>
 
struct node
{
    char data;
    node* next;
    node* tail;
 
    node(char data)
        : data(data), next(NULL), tail(NULL)
    {
    }
};
 
void list_add(node*& list, char data)
{
    if(list == NULL)
    {
        list = new node(data);
        list->tail = list;
        return;
    }
 
    list->tail->next = new node(data);
    list->tail = list->tail->next;
}
 
void list_println(node* list)
{
    for(node* p = list; p != NULL; p = p->next)
        std::cout << p->data;
    std::cout << std::endl;
}
 
void list_free(node* list)
{
    node* p;
    while(list != NULL)
    {
        p = list;
        list = list->next;
        delete p;
    }
}
 
int main()
{
    node* list = NULL;
 
    char ch;
    while(std::cin >> ch)
        list_add(list, ch);
 
    node* alpha_list = NULL;
    node* digit_list = NULL;
    node* other_list = NULL;
 
    for(node* p = list; p != NULL; p = p->next)
    {
        if(std::isdigit(p->data))
            list_add(digit_list, p->data);
        else if(std::isalpha(p->data))
            list_add(alpha_list, p->data);
        else
            list_add(other_list, p->data);
    }
 
    std::cout << "letters: ";
    list_println(alpha_list);
 
    std::cout << "digits: ";
    list_println(digit_list);
 
    std::cout << "other: ";
    list_println(other_list);
 
    list_free(list);
    list_free(alpha_list);
    list_free(digit_list);
    list_free(other_list);
}
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
27.12.2011, 01:47  [ТС]     списки #3
а что вводить при запуске?
последовательность любых символов?
как ее закончить тогда?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.12.2011, 02:05     списки #4
Цитата Сообщение от besbyblik Посмотреть сообщение
как ее закончить тогда?
Linux Ctrl+D, Windows Ctrl+Z.
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
27.12.2011, 02:53  [ТС]     списки #5
ввела строку,сод буквы, цифры и другие символы
нажала Ctrl+Z
ничего не происходит
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.12.2011, 12:23     списки #6
Цитата Сообщение от besbyblik Посмотреть сообщение
ничего не происходит
Что значит "ничего не происходит"?
1) программа просто завершается не показывая результата
2) программа остаётся "висеть" ожидая ввод
?
P.S. Попробуйте запустить программу непосредственно из коммандной строки.
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
27.12.2011, 12:41  [ТС]     списки #7
второе
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.12.2011, 13:38     списки #8
Попробуйте перед <Ctrl+Z> нажать <Enter>, либо нажать <Ctrl+Z> дважды.
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
27.12.2011, 13:44  [ТС]     списки #9
http://s49.***********/i124/1112/3b/b6a6483cbcfe.png
вот что получилось
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
27.12.2011, 13:57     списки #10
Цитата Сообщение от besbyblik Посмотреть сообщение
http://s49.***********/i124/1112/3b/b6a6483cbcfe.png
вот что получилось
Полагаю, что причина в функциях isdigit и isalpha.
Хотя они и принимают int, их параметер должен быть либо EOF, либо unsigned char, приведенный к int.

Вводите только ASCII символы.
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
27.12.2011, 17:19  [ТС]     списки #11
ввод латинскими буквами ничего не изменил

Net_Wanderer, где и на что вы предлагаете изменить?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
27.12.2011, 21:52     списки #12
besbyblik, исправьте в исходном коде везде, где написано char на unsigned char.
P.S. Если вам нужна кириллица подключите заголовочный файл locale
C++
1
#include <locale>
и добавьте первой строкой в функцию main строку std::locale::global(std::locale("Russian_Russia.866"));
C++
1
2
3
4
5
6
int main()
{
    // не знаю или правильно указал имя локали, но с этим думаю разберётесь
    std::locale::global(std::locale("Russian_Russia.866")); 
    //...
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
27.12.2011, 22:27     списки #13
Цитата Сообщение от besbyblik Посмотреть сообщение
ввод латинскими буквами ничего не изменил
проверьте ещё раз, все работает (надеюсь rangerx не будет возражать)
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
28.12.2011, 08:53  [ТС]     списки #14
я поняла почему не выводил!
просто я нажимала в vs на кнопку,а не f5

Добавлено через 10 часов 21 минуту
вопрос-это для односвязного линейного списка или нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2011, 19:17     списки
Еще ссылки по теме:

Списки C++
C++ Списки
Списки С++ C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
28.12.2011, 19:17     списки #15
Цитата Сообщение от besbyblik Посмотреть сообщение
вопрос-это для односвязного линейного списка или нет?
Да, в программе используется односвязный линейный список.
Yandex
Объявления
28.12.2011, 19:17     списки
Ответ Создать тему
Опции темы

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