Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
dima2358
1 / 1 / 0
Регистрация: 07.11.2014
Сообщений: 14
1

Сортировка слов по алфавиту

24.04.2016, 12:07. Просмотров 1026. Ответов 3
Метки нет (Все метки)

Есть какая-то строка, с словами, длина которых составляет от 6 до 16 символов. Слово заканчивается пробелом, запятой или точкой. Необходимо отсортировать их по алфавиту. Идей никаких нет(
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 12:07
Ответы с готовыми решениями:

Сортировка слов по алфавиту
Доброго времени суток. Нужно написать программу которая сортирует введенные с...

Массив: Сортировка слов по алфавиту
Всем добрый день! Помогите разобраться с задачей : Пользователь вводит...

Сортировка структуры слов по алфавиту
В структуре нам даны имена автора(или просто слова) и другие...

Сортировка слов в строке по алфавиту
Подскажите, пожалуйста, как после разделения введенной строки с помощью strtok,...

Сортировка слов из строки по алфавиту
Пользователь вводит строку в программу, и ему выводит на экран все слова с...

3
Геомеханик
790 / 596 / 938
Регистрация: 26.06.2015
Сообщений: 1,409
24.04.2016, 13:37 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <malloc.h>
#include <string.h>
 
typedef struct _node {
    const char* ptr;
    struct _node* next;
} node;
void slist_words(node** lst, char* s);
void slist_sort(node** lst);
void slist_clear(node* lst);
 
 
int main(void){
    node* lst, *p;
    char s[] = "XYZ Pascal, Lisp, Algol, C, D, WORD, APL, Prolog, ADA, PHP, Java, Snobol, Actor.";
 
    lst = NULL;
    slist_words(&lst, s);
    slist_sort(&lst);
 
    for(p = lst; p != NULL; p = p->next)
        puts(p->ptr);
    slist_clear(lst);
    return 0;
}
 
//заполнение списка словами
void slist_words(node** lst, char* s){
    char* i;
    node* p, *tail = NULL;
    const char delim[] = " \t\n.,?!";
 
    *lst = NULL;
    for(i = strtok(s, delim); i != NULL; i = strtok(NULL, delim)){
        p = (node*)malloc(sizeof(node));
        if(p == NULL)
            break;
 
        p->ptr  = i;
        p->next = NULL;
 
        if(tail == NULL)
            *lst = tail = p;
        else {
            tail->next = p;
            tail = p;
        }
    }
}
 
//сортировка списка по алфавиту
void slist_sort(node** lst){
    node* p, *i, *l, *n, *t, *q, *lp = *lst;
    if((lp == NULL) || (lp->next == NULL))
        return;
 
    i = l = *lst;
    p = n = t = NULL;
    for(q = *lst; (q != NULL) && (q->next != NULL); q = q->next->next) {
        l = i;
        i = i->next;
    }
    l->next = NULL;
 
    slist_sort(&lp);
    slist_sort(&i);
 
    while((lp != NULL) || (i != NULL)){ 
        if(i == NULL) {
            n  = lp;
            lp = lp->next;
        } else if(lp == NULL) {
            n = i;
            i = i->next;
        } else if(strcmp(lp->ptr, i->ptr) < 0) {
            n  = lp;
            lp = lp->next;
        } else {
            n = i;
            i = i->next;
        }
 
        if(p == NULL) 
            p = n;
        else
            t->next = n;
        t = n;
    }
    *lst = p;
}
 
//удаление всего списка
void slist_clear(node* lst){
    node* t;
    while(lst != NULL){
        t   = lst;
        lst = lst->next;
        free(t);
    }
}
Пример работы кода
1
Мария1111111ШШШ
0 / 0 / 0
Регистрация: 12.06.2018
Сообщений: 1
12.06.2018, 19:56 3
а можете объяснит как работает сортировка?
0
easybudda
Модератор
Эксперт CЭксперт С++
10146 / 6052 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
13.06.2018, 03:46 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
#include <stdio.h>
#include <string.h>
#include <glib.h>
 
#define DELIM " ,.!?\t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        GSList * words = NULL, * iter;
        char * ptr = strtok(buf, DELIM);
        
        for ( ; ptr; ptr = strtok(NULL, DELIM) )
            words = g_slist_prepend(words, ptr);
        
        words = g_slist_sort(words, (GCompareFunc) strcmp);
        
        printf("Sorted: ");
        for ( iter = words; iter; iter = g_slist_next(iter) )
            printf("%s ", (char*)(iter->data));
        
        g_slist_free(words);
        printf("\n");
    }
    
    return 0;
}
Код
[andrew@easybook strings]$ gcc -Wall words_by_abc.c \
> `pkg-config --cflags --libs glib-2.0`
[andrew@easybook strings]$ ./a.out 
String: Petrov Sidorov Ivanov
Sorted: Ivanov Petrov Sidorov 
String: money many more any
Sorted: any many money more 
String: 
[andrew@easybook strings]$
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2018, 03:46

Сортировка массива слов по алфавиту (только по 4-му и 5-му символу)
Есть два файла, input.txt, в котором в столбик записано некоторое количество...

Ввод из файла набора слов и его сортировка по алфавиту
В принципе работает, но этот код просто ужасный. Подскажите, пожалуйста, как...

Сортировка по алфавиту
Добрый день. Существует массив структур такого типа: struct student { ...


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

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

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