Напечатать слова в алфавитном порядке - C (СИ) (71364)

Узнай цену своей работы

Формулировка задачи:

Дана строка, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами – запятая, за последним словом – точка. Напечатать: Все слова в алфавитном порядке Если кто знает, как делать, буду рад оказанной помощи, у меня получилось разбить слова и записать их в массив, а как сортировку сделать не могу представить, а также надо сортировку сделать при помощи указателей, я никак с ними разобраться не могу, вот есть наработки, если кто знает напишите
#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;
}

Решение задачи: «Напечатать слова в алфавитном порядке»

textual
Листинг программы
#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;
}

Объяснение кода листинга программы

В этом коде на языке C:

  1. Написаны функции:
    • cmp: функция сравнения, используемая в функции qsort для сортировки массива строк.
    • get_string: функция, которая считывает строку из стандартного ввода до первого символа новой строки, оставляя все символы новой строки в строке.
    • main: точка входа в программу.
  2. Определены типы данных и переменные:
    • string_t: пользовательский тип данных, представляющий строку символов.
    • MAX_WORDS: максимальное количество слов в строке.
    • DELIM: строка, используемая для разделения слов в строке.
    • str: переменная типа string_t, которая считывается вводной функцией get_string.
    • words[i]: массив указателей на строки, которые считываются из str.
    • count: счетчик количества слов в строке.
    • p: указатель на текущее слово в строке.
  3. Происходит последовательность действий:
    • Сначала пользователю предлагается ввести строку.
    • Если строка была введена, то код разбивает строку на слова и сортирует их в алфавитном порядке с помощью функции qsort и функции сравнения cmp.
    • Затем код выводит отсортированные слова в обратном порядке.
  4. Используются директивы препроцессора и библиотеки:
    • #include <stdio.h>: подключает библиотеку для ввода/вывода.
    • #include <stdlib.h>: подключает библиотеку для работы с памятью.
    • #include <string.h>: подключает библиотеку для работы со строками.
    • #define MAX_WORDS 256: определяет максимальное количество слов в строке.
    • #define DELIM ,\t\n``: определяет строку, используемую для разделения слов в строке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы