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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 14:27     Вывести слова из строки в алфавитно порядке #1
Написать программу на языке Си которая запрашивает строку у пользователя, состоящую из слов английского языка, слова разделены пробелами. Вывести эти слова в порядке алфавита.

не пойму как реализовать вывод слов в порядке алфавита. спасибо всем кто поможет.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tye
0 / 0 / 1
Регистрация: 16.01.2011
Сообщений: 3
16.04.2011, 14:47     Вывести слова из строки в алфавитно порядке #2
попробуй сравнивать слова функцией strcmp
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 15:07  [ТС]     Вывести слова из строки в алфавитно порядке #3
этой функцией сравниваются строки вроде
tye
0 / 0 / 1
Регистрация: 16.01.2011
Сообщений: 3
16.04.2011, 16:10     Вывести слова из строки в алфавитно порядке #4
да, сравниваются строки по номеру буквы в слове, т.е. сортируются по алфавиту
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 18:16  [ТС]     Вывести слова из строки в алфавитно порядке #5
так у меня одна строка. что сравнивать
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
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;
}
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
16.04.2011, 20:09  [ТС]     Вывести слова из строки в алфавитно порядке #7
спасибо большое)))
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
22.04.2011, 22:49  [ТС]     Вывести слова из строки в алфавитно порядке #8
а можно это как-то все зделать не используя strtok. а используя только функции strcmp, strcat, strcpy, strlen.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
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;
}
Den_i3_Kh
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**
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
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;
}
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
23.04.2011, 15:33  [ТС]     Вывести слова из строки в алфавитно порядке #12
во. терь вообще отлично. спасибо Вам

Добавлено через 14 часов 33 минуты
а это все можно както зделать используя кодировку ASCII ??
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
23.04.2011, 16:02     Вывести слова из строки в алфавитно порядке #13
В смысле? Что конкретно не устраивает?
Den_i3_Kh
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 41
23.04.2011, 16:19  [ТС]     Вывести слова из строки в алфавитно порядке #14
ну на этапе сравнения строк можно както в ASCII реализовать. с помощью кодов
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
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;
}
Den_i3_Kh
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2011, 23:40     Вывести слова из строки в алфавитно порядке
Еще ссылки по теме:

Вывести слова в обратном порядке C++
Вывести слова в таком порядке, чтобы последняя буква каждого слова совпадала с первой буквой следующего C++
C++ Вывести слова в алфавитном порядке

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
26.04.2011, 23:40     Вывести слова из строки в алфавитно порядке #17
Сортировка вставками. Гугл в помощь.
Yandex
Объявления
26.04.2011, 23:40     Вывести слова из строки в алфавитно порядке
Ответ Создать тему
Опции темы

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