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

Вывести слова из строки в алфавитном порядке

16.04.2011, 14:27. Показов 8380. Ответов 18
Метки нет (Все метки)

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

не пойму как реализовать вывод слов в порядке алфавита. спасибо всем кто поможет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2011, 14:27
Ответы с готовыми решениями:

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

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

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

Вывести слова в алфавитном порядке
Дана строка-предложение. Вывести на экран все слова данной строки в алфавитном порядке

18
0 / 0 / 1
Регистрация: 16.01.2011
Сообщений: 3
16.04.2011, 14:47 2
попробуй сравнивать слова функцией strcmp
0
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 15:07  [ТС] 3
этой функцией сравниваются строки вроде
0
0 / 0 / 1
Регистрация: 16.01.2011
Сообщений: 3
16.04.2011, 16:10 4
да, сравниваются строки по номеру буквы в слове, т.е. сортируются по алфавиту
0
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 18:16  [ТС] 5
так у меня одна строка. что сравнивать
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
16.04.2011, 20:02 6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
int Cmp(const void* a, const void* b){
    return strcmp((const char*)*(char**)a, (const char*)*(char**)b);
}
 
int main(){
    char* mas[100]={NULL}, *tmp=NULL, text[300];
    int i, j, size;
    gets(text);
    for(tmp=strtok(text, " "), size=0; tmp; tmp=strtok(NULL, " "), ++size){
        mas[size]=tmp;
    }
    qsort(mas, size, sizeof(*mas), Cmp);
    for(i=0; i<size; ++i){
        puts(mas[i]);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 20:09  [ТС] 7
спасибо большое)))
0
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
22.04.2011, 22:49  [ТС] 8
а можно это как-то все зделать не используя strtok. а используя только функции strcmp, strcat, strcpy, strlen.
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
23.04.2011, 00:05 9
Цитата Сообщение от Den_i3_Kh Посмотреть сообщение
не используя strtok
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<stdlib.h>
 
int Cmp(const void* a, const void* b){
    return strcmp((const char*)*(char**)a, (const char*)*(char**)b);
}
 
int main(){
    char* mas[100]={NULL}, *tmp=NULL, text[500]={'\0'};
    int i, size;
    gets(text);
    for(i=0; i<sizeof(text); ++i){
        if(text[i]==' ')text[i]='\0';
    }
    for(i=0, size=0; i<sizeof(text); ++i){
        if(text[i]!='\0'){
            mas[size]=&text[i];
            ++size;
            while(text[i]!='\0')++i;
        }
    }
    qsort(mas, size, sizeof(*mas), Cmp);
    for(i=0; i<size; ++i){
        puts(mas[i]);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
23.04.2011, 00:22  [ТС] 10
int Cmp(const void* a, const void* b){
return strcmp((const char*)*(char**)a, (const char*)*(char**)b);

что это за ужас??))

Добавлено через 5 минут
после ретерна не пойму что произошло

Добавлено через 1 минуту
как это char**
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
23.04.2011, 00:35 11
qsort лучше убрать
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
#include<stdio.h>
#include<string.h>
#include<stddef.h>
 
int main(){
    char* mas[100]={NULL}, *tmp=NULL, text[500]={'\0'};
    int i, j, size;
    gets(text);
    for(i=0; i<sizeof(text); ++i){
        if(text[i]==' ')text[i]='\0';
    }
    for(i=0, size=0; i<sizeof(text); ++i){
        if(text[i]!='\0'){
            mas[size]=&text[i];
            ++size;
            while(text[i]!='\0')++i;
        }
    }
    for(i=0; i<size; i++){
        tmp=mas[i];
        for(j=i-1; j>=0&&strcmp(tmp, mas[j])<0; --j){
            mas[j+1]=mas[j];
        }
        mas[j+1]=tmp;
    }
    for(i=0; i<size; ++i){
        puts(mas[i]);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
23.04.2011, 15:33  [ТС] 12
во. терь вообще отлично. спасибо Вам

Добавлено через 14 часов 33 минуты
а это все можно както зделать используя кодировку ASCII ??
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
23.04.2011, 16:02 13
В смысле? Что конкретно не устраивает?
0
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
23.04.2011, 16:19  [ТС] 14
ну на этапе сравнения строк можно както в ASCII реализовать. с помощью кодов
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
23.04.2011, 17:03 15
т. е. написать свою ф-цию сравнения строк? можно
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
#include<stdio.h>
 
int StrCmp(const char* a, const char* b){
    for(; *a&&*b; ++a, ++b){
        if(*a-*b) return *a-*b;
    }
    return *a-*b;
}
 
int main(){
    char* mas[100]={NULL}, *tmp=NULL, text[500]={'\0'};
    int i, j, size;
    gets(text);
    for(i=0; i<sizeof(text); ++i){
        if(text[i]==' ')text[i]='\0';
    }
    for(i=0, size=0; i<sizeof(text); ++i){
        if(text[i]!='\0'){
            mas[size++]=&text[i];
            while(text[i]!='\0')++i;
        }
    }
    for(i=0; i<size; i++){
        tmp=mas[i];
        for(j=i-1; j>=0&&StrCmp(tmp, mas[j])<0; --j){
            mas[j+1]=mas[j];
        }
        mas[j+1]=tmp;
    }
    for(i=0; i<size; ++i){
        puts(mas[i]);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
26.04.2011, 21:21  [ТС] 16
вынужден обратиться еще раз. никак не пойму что происходит на этапе когда j вступает в действие.
если не сложно. хоть в общих чертах
C++
1
2
3
4
5
6
for(i=0; i<size; i++){
        tmp=mas[i];
        for(j=i-1; j>=0&&strcmp(tmp, mas[j])<0; --j){
            mas[j+1]=mas[j];
        }
        mas[j+1]=tmp;
Добавлено через 1 минуту
что означает j=i-1 и строка j+1
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
26.04.2011, 23:40 17
Сортировка вставками. Гугл в помощь.
0
0 / 0 / 0
Регистрация: 14.04.2019
Сообщений: 15
14.04.2019, 17:22 18
Можете обьяснить что тут происходит ?
C
1
2
int Cmp(const void* a, const void* b){
    return strcmp((const char*)*(char**)a, (const char*)*(char**)b);
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
14.04.2019, 18:38 19
Bottichelli, strcmp принимает const char*, поэтому приводим a и b к этому виду.
1
14.04.2019, 18:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2019, 18:38
Помогаю со студенческими работами здесь

Вывести слова в алфавитном порядке
Здравствуйте, помогите доделать прогу, в ней выводятся слова которые состоят из 4 букв, ещё нужно...

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

Вывести слова в строке в алфавитном порядке
Есть строка char (проинициализированная в коде), где слова разделены пробелами и запятыми. Нужно...

Вывести в алфавитном порядке предпоследние слова всех предложений
Дан текст, состоящий из N (2&lt;=N&lt;=10) строк с максимальной длиной 80 символов. Необходимо вывести в...


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

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