Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Vovchik18
0 / 0 / 0
Регистрация: 13.02.2015
Сообщений: 6
#1

Разделение строки на слова с использованием линейного списка - C (СИ)

29.06.2015, 07:34. Просмотров 443. Ответов 1
Метки нет (Все метки)

Разработать программу для обработки строки с использованием линейного списка.Исходная строка вводится с клавиатуры. В строке записаны слова через пробел или несколько пробелов. В начале и концах строк тоже могут быть пробелы. Выделить из строки слова и записать в консольное окно.
Алгоритм выполнения: В строке записаны правильные 8-ричные и 16-ричные константы. На левый конец очереди переписать слова котрые представляют правильные 8-ричные константы, а на правый конец - 16-ричные. Порядок записи констант произвольный.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2015, 07:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разделение строки на слова с использованием линейного списка (C (СИ)):

Разделение строки на слова
Как я знаю для разделения строки типа char* на слова по разделителю...

Ошибка при печати значения строки из линейного списка
Здравствуйте. Балуюсь тут. Смысл: пытаюсь разделить строку на слова, на шарпе...

Создание линейного односвязного списка
-найти произведение элементов списка. -вывести на экран нечетные элементы...

Структура для линейного двунаправленного списка из комплексных чисел
Как создать структуру для линейного двунаправленного списка из комплексных...

Создать меню для однонаправленного линейного динамического списка
Всем привет. Написал программу для однонаправленного линейного динамического...

Выполнить разделение каждого слова на части для переноса
1. Дан текст, являющийся русскими словами. Выполнить разделение каждого его...

1
Геомеханик
785 / 592 / 937
Регистрация: 26.06.2015
Сообщений: 1,409
30.06.2015, 11:33 #2
Лучший ответ Сообщение было отмечено Vovchik18 как решение

Решение

Как понял так и сделал.

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
#include <stdio.h>
#include <ctype.h>
#include <malloc.h>
 
typedef struct _node {
    const char* p;
    struct _node* next;
} node;
 
typedef struct {
    node* head;
    node* tail;
} slist;
 
void slist_init(slist* lst);
int  slist_push_front(slist* lst, const char* p);
int  slist_push_back(slist* lst, const char* p);
void slist_clear(slist* lst);
 
 
void split_word(slist* lst, char* s){
    int   h;
    char* p;
 
    slist_init(lst);
 
    while(*s){
 
        while(*s && ! isxdigit(*s))
            ++s;
 
        p = s;
        h = 0;
        while(isxdigit(*p)){
            if(! h)
                h = (*p >= '8');
            ++p;
        }
 
        if(*s){
            if(*p != '\0')
                *p++ = '\0';
 
            if(h)
                slist_push_back(lst, s);
            else
                slist_push_front(lst, s);
        }
        s = p;
    }
}
 
 
 
int main(void){
    node* it;
    slist deq;
 
    char s[128] = "AB 12 FF 8E AC 78 9A 77 75 DC 10 45 67 CF 33";
/*
    printf("enter str: ");
    fgets(s, sizeof(s), stdin);
    fflush(stdin);
*/
    split_word(&deq, s);
 
    //вывести
    for(it = deq.head; it != NULL; it = it->next)
        printf("%s ", it->p);
 
    slist_clear(&deq);
    return 0;
}
 
//инициализация списка
void slist_init(slist* lst){
    lst->head = lst->tail = NULL;
}
 
//вставка элемента в голову списка
int slist_push_front(slist* lst, const char* p){
    node* n = (node*)malloc(sizeof(node));
    if(n != NULL){
        n->next = NULL;
        n->p    = p;
 
        if(lst->head == NULL)
            lst->head = lst->tail = n;
        else {
            n->next   = lst->head;
            lst->head = n;
        }
    }
    return (n != NULL);
}
 
//вставка элемента в конец списка
int slist_push_back(slist* lst, const char* p){
    node* n = (node*)malloc(sizeof(node));
    if(n != NULL){
        n->next = NULL;
        n->p    = p;
 
        if(lst->head == NULL)
            lst->head = lst->tail = n;
        else {
            lst->tail->next = n;
            lst->tail = n;
        }
    }
    return (n != NULL);
}
 
//удаление списка
void slist_clear(slist* lst){
    node* t;
    while(lst->head != NULL){
        t= lst->head;
        lst->head = lst->head->next;
        free(t);
    }
    lst->tail = NULL;
}
Результат работы кода
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2015, 11:33
Привет! Вот еще темы с решениями:

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

Разделение строки
Как в Си разделить строку на несколько строк так, чтобы она осталась одной...

Выделить из строки str1 все слова, начинающиеся с гласной буквы, а из строки str2 - слова, начинающиеся с согласной
Выделить из строки str1 все слова, начинающиеся с гласной буквы, а из строки...

Разделение строки на массив указателей (слов)
Дана строка сделать функцию преобразующую её в массив слов вот наработки ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru