Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 8
1

Упорядочить по алфавиту слова предложения

09.12.2009, 14:31. Показов 2037. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать на языке Си, используя только функции.ввести предложение и он должен упорядочить по алфавиту слова из этого предложения. не забывая о том что можно вводить и точки и запятые.

Добавлено через 2 минуты
У меня есть код, но там всё без функций. а сам я не допетрю как.

Добавлено через 48 минут
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
#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\n", arr[i]);
        
        /* освобождение памяти */
        for ( i = 0; i < count; i++ ){
                free(arr[i]);
                arr[i] = NULL;
        }
        free(arr);
        arr = NULL;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2009, 14:31
Ответы с готовыми решениями:

Упорядочить слова предложения по алфавиту
У меня чего то не получаеться перевести с паскаля на си задачи по строкам! var s: array of...

Упорядочить слова в строке по алфавиту
. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести...

Упорядочить по алфавиту буквы слова
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Упорядочить по алфавиту буквы каждого слова в предложении
Вводится предложение.Необходимо упорядочить буквы в словах по алфавиту и удалить слова, содержащие...

4
Заблокирован
Автор FAQ
10.12.2009, 18:05 2
Вот так можно получить массив слов chWords, дальше останется выполниь сортировку массива по какому-нибудь из критериев...
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <windows.h>
#include <stdio.h>
 
int * flag = (int *)malloc(sizeof(char));
char * str = (char *)malloc(sizeof(char));
char ** chWords = (char **)malloc(sizeof(char));
 
//Организуем ввод текстового блока 
//до того как будет введен символ ch_end
char * enter_text(char * str, char ch_end);
 
//Заменяем в строке все знаки 
//из массива rem_chrs на символ ch_repl
char * s_rpl_chrs(char * str, char * rem_chrs, char ch_repl);
 
//Функция удаляет из строки лишние пробелы
//после неё все слова идут через 1 пробел
char * nspace_rmv(char * str);
 
//Подсчёт числа символов chr в строке
int get_num_chars(char * str, char chr);
 
//Функция копирует все слова из строки str  в массив chWords
char ** s_get_wds(char * str, char ** chWords);
 
void main()
{
    printf("\tEnter text block\r\n");
    //При вводе пользователь нажимает Enter
    //т.е окончание ввода можно узнать по символу 
    //перевода курсора на новую строку
    str = enter_text(str, '\n');
    //Заменяем в строке все знаки препинания и прочие символы на пробелы
    str = s_rpl_chrs(str, "`~!@#$%^&*()_+=|\\/*-:;,.?{}[]<>", ' ');
    str = nspace_rmv(str);
    printf("\tTransformed string :\r\n");
    printf("%s\r\n",str);
    
    int nWords = get_num_chars(str, ' ') + 1;
    chWords = (char **)realloc((void *)chWords,sizeof(char)*nWords);
    flag    = (int *)realloc((void *)flag,sizeof(int)*nWords);
    for(int i = 0; i < nWords; i++)
        chWords[i] = (char *)malloc(sizeof(char));
    chWords = s_get_wds(str, chWords);
             printf("\tString consist from next words:\r\n");
    for(int j = 0; j < nWords; j++)
    {
        chWords[j]++;
        printf("%s\r\n",chWords[j]);
    }
}
 
char * enter_text(char * str, char ch_end)
{
    if(str)
    {
        int i = 0;
        while((str[i] = getchar()) != ch_end)
        {
            i++;
            str = (char *)realloc((void *)str,sizeof(char)*(i + 1));
        }
        str[i] = '\0';
    }
    return str;
}
 
char * s_rpl_chrs(char * str, char * rem_chrs, char ch_repl)
{
    if(str && rem_chrs)
    {
        int sLen  = strlen(str);
        int chLen = strlen(rem_chrs);
        for(int i = 0,j; i < sLen; i++)
        {
            for(j = 0; j < chLen; j++)
            {
                if(str[i] == rem_chrs[j])
                    str[i] = ch_repl;
            }
        }
    }
    return str;
}
 
char * nspace_rmv(char * str)
{
    int i,j,sLen;
    char * chBuf = strchr(str, ' ');
    if(chBuf)
    {
        sLen = strlen(str);
        while(chBuf)
        {
            i    = sLen - strlen(chBuf);
            j = i + 1;
            while(str[j] == ' ')
                j++;
            if(1 < j - i)
            {
                memmove((void *)&str[i + 1],(void *)&str[j],sLen - j - 1);
                sLen      = i + (sLen - j - 1);
                str[sLen] = '\0';
            }
            i = j;
            chBuf = strchr(str + i, ' ');
        }
    }
    return str;
}
 
int get_num_chars(char * str, char chr)
{
    int nChars = 0;
    char * chBuf = strchr(str,chr);
    while(chBuf)
    {
        nChars++;
        chBuf = strchr(chBuf + 1,chr);
    }
    return nChars;
}
 
char ** s_get_wds(char * str, char ** chWords)
{
    if(str)
    {
        int i = 0;
        char * chBuf = strrchr(str,' ');
        while(chBuf)
        {
            chWords[i] = (char *)
                realloc(chWords[i],sizeof(char)*(1 + strlen(chBuf)));
            sprintf(chWords[i],">%s",chBuf);
            str[strlen(str) - strlen(chBuf)] = '\0';
            chBuf = strrchr(str,' ');
            i++;
        }
        if(strlen(str))
        {
            chWords[i] = (char *)
                    realloc(chWords[i],sizeof(char)*(1 + strlen(str)));
            sprintf(chWords[i],">%s",str);
        }
    }
    return chWords;
}
0
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 8
10.12.2009, 20:08  [ТС] 3
Добавлено через 38 секунд
выдает ошибку:main' must return `int'.....return type for `main' changed to `int'
0
Заблокирован
Автор FAQ
11.12.2009, 09:09 4
Ошибка от студии зависит я в 6-й работаю....
0
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 8
16.12.2009, 14:46  [ТС] 5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ошибка от студии зависит я в 6-й работаю....
Добавлено через 9 минут
Тут целый ряд ошибок(((



-------------- Build: Debug in 66 ---------------

Compiling: main.c
main.c:4: error: initializer element is not constant
main.c:5: error: initializer element is not constant
main.c:6: error: initializer element is not constant
main.c:27: warning: return type of 'main' is not `int'
main.c: In function `main':
main.c:42: error: 'for' loop initial declaration used outside C99 mode
main.c:46: error: 'for' loop initial declaration used outside C99 mode
main.c: In function `s_rpl_chrs':
main.c:74: error: 'for' loop initial declaration used outside C99 mode
Process terminated with status 1 (0 minutes, 1 seconds)
6 errors, 1 warnings
0
16.12.2009, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2009, 14:46
Помогаю со студенческими работами здесь

Упорядочить слова предложения в обратном порядке
реализовать функцию, формирующую из слов, переданных в качестве параметров , предложение,...

Произвольные строки, слова разделены пробелом, нужно слова упорядочить по алфавиту
Написал такое, но это не подходит, обязательное условие: Текст должен вводится и содержать не более...

Упорядочить слова по алфавиту и указать количество повторений каждого слова
:wall: С клавиатуры вводятся слова. Надо упорядочить эти слова по алфавиту и указать количество...

Упорядочить слова по алфавиту
Упорядочить слова по алфавиту помогите пожалуйста!


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

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