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

Упорядочить слова в алфавитном порядке на С - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
cizer
14 / 14 / 7
Регистрация: 10.01.2011
Сообщений: 146
02.01.2012, 02:45     Упорядочить слова в алфавитном порядке на С #1
ребят помогите с задачкой, а то препод озадачил. самому не получается сделать.
требуется отсортировать слова в строке в алфавитном порядке. строка заносится в символьный массив. функцию strlen использовать нельзя. массив безразмерный. сортировку требуется занести в отдельную функцию.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
02.01.2012, 09:35     Упорядочить слова в алфавитном порядке на С #2
http://www.cyberforum.ru/cpp-beginne...ead277479.html
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
02.01.2012, 16:35     Упорядочить слова в алфавитном порядке на С #3
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
/* оболочка strcmp(const char*, const char*) для функции qsort */
int compareStrings(const void *a, const void *b){
        return strcmp(*(char**)a, *(char**)b);
}
 
/* указатель на следующее слово в строке, или 0, если слова кончились */
char *nextWord(char *str){
        char *p;
        for ( p = str; *p != '\0' && !isspace(*p) && !ispunct(*p); p++ )
                ;
        if ( *p == '\0' )
                return NULL;
        while ( isspace(*p) || ispunct(*p) )
                p++;
        return ( *p == '\0' ) ? NULL : p;
}
 
/*
*       возвращает одно слово из строки str в буфере wrd. динна wrd = len - 1
*       в случае неудачи вернёт NULL
*/
char *getWord(const char *str, char *wrd, size_t len){
        char *p;
        char *w;
 
        for ( p = (char *)str, w = wrd;  *p != '\0' && !isspace(*p) && !ispunct(*p) && --len > 0; p++, w++ )
                *w = *p;
        *w = '\0';
 
        return wrd;
}
 
int main(){
        char buf[BUFSIZ];
        char wrd[BUFSIZ];
        char **arr, *pBuf;
        int count, i;
        size_t len;
 
        printf("Enter some string: ");
        fgets(buf, BUFSIZ, stdin);
        if ( strlen(buf) < 2 ) { /* в строке только \n */
                printf("Empty string not allowed\n");
                exit(1);
        }
        buf[strlen(buf) - 1] = '\0';
        /* подсчёт слов */
        for ( count = 0, pBuf = buf; pBuf != NULL; count++, pBuf = nextWord(pBuf) )
                ;
        if ( !count ) {
                printf("Empty string not allowed\n");
                exit(1);
        }
 
        /* массив указателей на слова */
        if ( (arr = (char **)calloc(count, sizeof(char*))) == NULL ){
                printf("Memory error\n");
                exit(1);
        }
 
        /* заполнение массива словами */
        for ( i = 0, pBuf = buf; i < count && pBuf != NULL; i++, pBuf = nextWord(pBuf) ){
                if ( getWord(pBuf, wrd, BUFSIZ) == NULL )
                        break; /* на всякий случай */
                len = strlen(wrd);
                if ( (arr[i] = (char *)malloc(len + 1)) == NULL ) {
                        printf("Not enough memory\n");
                        exit(1);
                }
                strcpy(arr[i], wrd);
        }
 
        /* сортировка массива */
        qsort((void*)arr, count, sizeof(char*), compareStrings);
 
        /* вывод */
        for ( i = 0; i < count; i++ )
                printf("%s ", arr[i]);
 
        /* освобождение памяти */
        for ( i = 0; i < count; i++ ){
                free(arr[i]);
                arr[i] = NULL;
        }
        free(arr);
        arr = NULL;
 
        getch();
 
        exit(0);
}
Код взят на форуме, только не помню в какой теме, и автора тоже к сожалению не помню (код валялся в файле на винчестере), но если он(автор кода) зайдёт в тему то думаю отпишеться )
cizer
14 / 14 / 7
Регистрация: 10.01.2011
Сообщений: 146
02.01.2012, 20:51  [ТС]     Упорядочить слова в алфавитном порядке на С #4
оба кода не работают. в 1 вообще не запускается. во 2 не знает операторов.

в задании вообще разрешено использовать только 1 чаровский массив. и все. в нем только и работать. функциями для строк пользоваться она также запретила.
Диман56
22 / 22 / 0
Регистрация: 07.11.2011
Сообщений: 154
02.01.2012, 21:09     Упорядочить слова в алфавитном порядке на С #5
Даже функциями для строк(те, что в string.h) нельзя пользоваться?
cizer
14 / 14 / 7
Регистрация: 10.01.2011
Сообщений: 146
02.01.2012, 23:29  [ТС]     Упорядочить слова в алфавитном порядке на С #6
нет. она запретила. она сказала делать все через символы в массиве. если можно было сам бы сделал. а так я не знаю
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
03.01.2012, 00:06     Упорядочить слова в алфавитном порядке на С #7
Ну функции вроде strcmp, isalpha, ispunct Вы и сами можете написать, в них ничего сложного ведь нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2012, 18:53     Упорядочить слова в алфавитном порядке на С
Еще ссылки по теме:

C++ Получить из файла строки, содержащие четырехбуквенные слова. Слова отсортировать в алфавитном порядке
C++ Упорядочены ли слова в алфавитном порядке
C++ Вывести слова в алфавитном порядке

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

Или воспользуйтесь поиском по форуму:
cizer
14 / 14 / 7
Регистрация: 10.01.2011
Сообщений: 146
03.01.2012, 18:53  [ТС]     Упорядочить слова в алфавитном порядке на С #8
Gepar, я еще новичок. я таких функций даже не знаю
Yandex
Объявления
03.01.2012, 18:53     Упорядочить слова в алфавитном порядке на С
Ответ Создать тему
Опции темы

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