Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
1

Напечатать слова в алфавитном порядке

23.01.2014, 18:19. Просмотров 2663. Ответов 15
Метки нет (Все метки)

Дана строка, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами – запятая, за последним словом – точка. Напечатать:
Все слова в алфавитном порядке
Если кто знает, как делать, буду рад оказанной помощи, у меня получилось разбить слова и записать их в массив, а как сортировку сделать не могу представить, а также надо сортировку сделать при помощи указателей, я никак с ними разобраться не могу, вот есть наработки, если кто знает напишите
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
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    char s[100] = {"fesa,tre,qwrp,kjfo,aks,ptfgdr,odjhf,bckjd,abgfs.\n"};
    char b[100][100];
    char *str[100];
    int i, j, n = 30, r, l, kol = 0;
    char *raz;
    puts(s);
    //gets(s);
    
    printf( "Razbit:\n" );
    raz = strtok(s, ".,");
          while( raz != NULL )
             {
                 printf("%s \n", raz);
                 raz = strtok(NULL, ".,");
                 kol++;
            }
          /*перенос слов в новый массив для сравнения*/
                for (int j = 0, z = 0; j < kol; j++) 
                    {
                    for (int i = z, l = 0; s[i] != '\0' ; i++, l++)
                        {
                            b[j][l] = s[i];
                            b[j][l + 1] = '\0';
                            z++;
                        }
                    z++;
                    } 
//сортировка по алфавиту, но не верная, она не работает
     for(j = 0;j < n; j++)
    {
        r = 0;
        for(l = 0;l < n;l++)
        {
            if (strcmp(b[j],b[l])>0)
            {
                r++;
            }
            if(l < j && strcmp(b[j],b[l])==0)
                r++;
 
        }
        str[r] = b[j];
 
    }
    for(j = 0;j < n; j++)
    {
        printf("%s\n",str[r]);
    }
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2014, 18:19
Ответы с готовыми решениями:

Напечатать в алфавитном порядке слова исходного текста, исключив повторяющиеся слова
Напечатать в алфавитном порядке слова исходного текста, исключив повторяющиеся слова. Разделители...

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

Как напечатать слова текста в алфавитном порядке
Предположим, дан текст. Как можно напечатать все входящие в него слова в алфавитном порядке?

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

15
3300 / 2681 / 724
Регистрация: 25.03.2012
Сообщений: 9,683
Записей в блоге: 1
23.01.2014, 20:14 2
А что это за алгоритм сортировки?
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
23.01.2014, 20:27  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А что это за алгоритм сортировки?
На основе сравнение строк
0
3300 / 2681 / 724
Регистрация: 25.03.2012
Сообщений: 9,683
Записей в блоге: 1
23.01.2014, 20:48 4
Как алгоритм-то называется?
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
23.01.2014, 20:53  [ТС] 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Как алгоритм-то называется?
Сортировка строк по алфавиту
0
3300 / 2681 / 724
Регистрация: 25.03.2012
Сообщений: 9,683
Записей в блоге: 1
23.01.2014, 20:57 6
Твоя сортировка не похожа ни на пузырёк, ни на выбор, ни на вставки. (хотя чем-то отдалённо напоминает их)

Добавлено через 1 минуту
Цитата Сообщение от ilya0610 Посмотреть сообщение
Сортировка строк по алфавиту
это не ответ. Ты когда писал этот код, какие алгоритмы сортировок изучал?
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
23.01.2014, 20:58  [ТС] 7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Твоя сортировка не похожа ни на пузырёк, ни на выбор, ни на вставки. (хотя чем-то отдалённо напоминает их)
Я хотел сделать пузырьков сортировку, но преподаватель сказал, что это будет не правильно, а с помощью указатель не знаю, как это можно сделать

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Твоя сортировка не похожа ни на пузырёк, ни на выбор, ни на вставки. (хотя чем-то отдалённо напоминает их)

Добавлено через 1 минуту


это не ответ. Ты когда писал этот код, какие алгоритмы сортировок изучал?
Я изучал пузырек и знаю его, просто так типо он говорит не верно
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
23.01.2014, 21:04 8
Алгоритм у сортировки хоть какой то должен быть. Опишите его.
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
23.01.2014, 21:15  [ТС] 9
Цитата Сообщение от MrGluck Посмотреть сообщение
Алгоритм у сортировки хоть какой то должен быть. Опишите его.
Если я правильной, понял алгоритм основывается или на методе пузырька, или вставок, если я не ошибаюсь можно использовать qsort, но это врят ли

Просто не могу понять, как использовать сортировку относительно к строкам, например, с числами было намного проще
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
23.01.2014, 21:30 10
Цитата Сообщение от ilya0610 Посмотреть сообщение
если я не ошибаюсь можно использовать qsort, но это врят ли
вы уж определитесь.
Хочу то, не знаю что.
Алгоритм или словами или блок-схемой опишите, вас никто понять не может.
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
23.01.2014, 21:41  [ТС] 11
Цитата Сообщение от MrGluck Посмотреть сообщение
вы уж определитесь.
Хочу то, не знаю что.
Алгоритм или словами или блок-схемой опишите, вас никто понять не может.
Короче мне необходимо сортировка на слова, чтобы выводила в алфавитном порядке - любая, работующая с мои началом
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
24.01.2014, 00:43 12
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
/* Äàíà ñòðîêà. Ñëîâà ðàçäåëåíû çàïÿòûìè, ïîñëå ïîñëåäíåãî òî÷êà. Âûâåñòè ñëîâà
* â àëôàâèòíîì ïîðÿäêå */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    
int main(void)
{
    char str[256] = "fesa,tre,qwrp,kjfo,aks,ptfgdr,odjhf,bckjd,abgfs.";
    char **words = NULL, *p = NULL;
    size_t i, j, len = strlen(str), numWords = 1;
    
    /* ïîäñ÷èòûâàåì êîëè÷åñòâî ñëîâ */
    for (i=0; i < len; i++)
        if (str[i] == ',')
            numWords++;
    
    if ((words = malloc(sizeof(char *) * numWords)) == NULL)
        return 1;
    
    /* îòäåëÿåì ñëîâà */
    i = 0;
    for (p = strtok(str, ","); p != NULL; p = strtok(NULL, ","))
        if ((words[i++] = strdup(p)) == NULL)
            return 2;
    /* îáðóáàåì ïîñëåäíþþ òî÷êó */
    words[numWords - 1][strlen(words[numWords - 1]) - 1] = '\0';
    
    /* ñîðòèðóåì ìàññèâ ñëîâ ïóçûðüêîì */
    for (i = 0; i < numWords; i++)
        for (j = numWords - 1; j > i; j--)
            if (strcmp(words[i], words[j]) > 0)
            {
                p = words[i];
                words[i] = words[j];
                words[j] = p;
            }
    
    /* âûâîäèì ïîëó÷åííûé ðåçóëüòàò è îñâîáîæäàåì ïàìÿòü */
    for (i = 0; i < numWords; i++)
    {
        printf("%s ", words[i]);
        free(words[i]);
    }
    free(words);
    return 0;
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10879 / 6769 / 1620
Регистрация: 25.07.2009
Сообщений: 12,485
24.01.2014, 01:16 13
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int cmp(const void * a, const void * b) {
    return strcmp(*(char**)b, *(char**)a);
}
 
typedef char string_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
 
#define MAX_WORDS (256)
#define DELIM " ,\t\n"
 
int main(void) {
    string_t str;
    
    while ( printf("String: ") && get_string(str) ) {
        char * words[MAX_WORDS], * p = strchr(str, '.');
        int count = 0;
        
        if ( p )
            *p = '\0';
        
        for ( p = strtok(str, DELIM); p && count < MAX_WORDS; p = strtok(NULL, DELIM) )
            words[count++] = p;
        
        qsort(words, count, sizeof(char*), cmp);
        
        while ( count )
            printf("%s\n", words[--count]);
    }
    
    return 0;
}
1
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
24.01.2014, 19:51  [ТС] 14
Поясните пожалуйста вот эту строку: if ((words = malloc(sizeof(char *) * numWords)) == NULL)
я не не понимаю что за команды использованы, я их просто не проходил и не уверен , что он сойдут за правду, можно ли их как то заменить
И еще команда strup- в чем ее суть и как с ней обращаться, и плюс зачем писать free(words);
и можно вместо обрубания в конец написать нулевой байт, то есть words[numWords][j] = '\0'

Добавлено через 5 минут
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
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
 
void razbit(char *str,char slova[30][11],int *nn);
void sort(char *str);
 
int _tmain(int argc, _TCHAR* argv[])
{
    char s[350] = {"fesa,tre,qwrp,kjfo,aks,ptfgdr,odjhf,bckjd,abgfs.\n"};
    char slova[30][11];
    int i, n = 30;
    gets(s);
    razbit(s, slova, &n);
 
 
    return 0;
}
void razbit(char*str,char slova[30][11],int *nn)
{       
    int n,i,j;
    char *s, *p = str; 
     n = *nn; 
        for(;*p != '.';) 
        {
            while((*p != '.') && (*p == ','))
                p++; 
                s = p; 
            if (*s != '.') 
            {
                p = strstr(s, ","); 
                if (p == NULL) 
                    p = strstr(s, "."); 
                    j = p - s; 
                    strncpy(slova[n], s, j);
                    slova[n][j]='\0';
                    n++; 
            }
        }
    *nn = n;
}
Сделал другой метод разбиения, если кто может напишите сортировку, к этой программе, очень трудно понять как действуют, то что было раньше написанно
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
24.01.2014, 20:30 15
Цитата Сообщение от ilya0610 Посмотреть сообщение
Поясните пожалуйста вот эту строку: if ((words = malloc(sizeof(char *) * numWords)) == NULL)
выделяем память в words размером с (размер указателя на char*, помноженный на количество слов). Если выделить память не удалось (malloc вернет NULL), то выполнить условие
Цитата Сообщение от ilya0610 Посмотреть сообщение
я их просто не проходил
значит время пришло. Это основы, и если вы все-таки хотите изучать язык, то придется выучить.
Цитата Сообщение от ilya0610 Посмотреть сообщение
он сойдут за правду
какую правду? Вы хотите Ctrl + C, Ctrl + V и сдать? Мы здесь помогаем вам понять язык, а не выполняем ваше ДЗ.
Цитата Сообщение от ilya0610 Посмотреть сообщение
можно ли их как то заменить
можно - разрешаю
Цитата Сообщение от ilya0610 Посмотреть сообщение
команда strup- в чем ее суть и как с ней обращаться
у меня такой нет. Но если вы про strdup, то http://www.opennet.ru/man.shtm... &russian=2 и вообще, STFW!
Цитата Сообщение от ilya0610 Посмотреть сообщение
зачем писать free(words);
там же даже комментарий на русском память освобождаем, выделенную под массив слов
Цитата Сообщение от ilya0610 Посмотреть сообщение
можно вместо обрубания в конец написать нулевой байт, то есть words[numWords][j] = '\0'
Нельзя, в j хранится мусор, а вовсе не конец слова. Но если все-таки хочется...
Да и как бы смысл был - лишнюю точку убрать.
Цитата Сообщение от ilya0610 Посмотреть сообщение
если кто может напишите сортировку, к этой программе
Цитата Сообщение от ilya0610 Посмотреть сообщение
/* сортируем массив слов пузырьком */
Цитата Сообщение от easybudda Посмотреть сообщение
qsort(words, count, sizeof(char*), cmp);
это сложно Вам два варианта дали - со встроенной функцией и пузырьком. WTF, что может быть проще?
Цитата Сообщение от ilya0610 Посмотреть сообщение
очень трудно понять как действуют, то что было раньше написанно
Литература Си
Вам тут уже ничем не поможешь более, у меня итак каждый шаг подробно расписан и сделано все по максимально тривиальному принципу
1
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 2
09.04.2016, 08:44 16
как будет цикл если надо Напечатать все слова в порядке убывания.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2016, 08:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Расставить слова в предложении в алфавитном порядке
хотя бы алгоритм


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

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

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