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

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

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

Дана строка, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами – запятая, за последним словом – точка. Напечатать: Все слова в алфавитном порядке Если кто знает, как делать, буду рад оказанной помощи, у меня получилось разбить слова и записать их в массив, а как сортировку сделать не могу представить, а также надо сортировку сделать при помощи указателей, я никак с ними разобраться не могу, вот есть наработки, если кто знает напишите
Листинг программы
  1. #include "stdafx.h"
  2. #include "string.h"
  3. #include "stdio.h"
  4.  
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7. char s[100] = {"fesa,tre,qwrp,kjfo,aks,ptfgdr,odjhf,bckjd,abgfs.\n"};
  8. char b[100][100];
  9. char *str[100];
  10. int i, j, n = 30, r, l, kol = 0;
  11. char *raz;
  12. puts(s);
  13. //gets(s);
  14. printf( "Razbit:\n" );
  15. raz = strtok(s, ".,");
  16. while( raz != NULL )
  17. {
  18. printf("%s \n", raz);
  19. raz = strtok(NULL, ".,");
  20. kol++;
  21. }
  22. /*перенос слов в новый массив для сравнения*/
  23. for (int j = 0, z = 0; j < kol; j++)
  24. {
  25. for (int i = z, l = 0; s[i] != '\0' ; i++, l++)
  26. {
  27. b[j][l] = s[i];
  28. b[j][l + 1] = '\0';
  29. z++;
  30. }
  31. z++;
  32. }
  33. //сортировка по алфавиту, но не верная, она не работает
  34. for(j = 0;j < n; j++)
  35. {
  36. r = 0;
  37. for(l = 0;l < n;l++)
  38. {
  39. if (strcmp(b[j],b[l])>0)
  40. {
  41. r++;
  42. }
  43. if(l < j && strcmp(b[j],b[l])==0)
  44. r++;
  45. }
  46. str[r] = b[j];
  47. }
  48. for(j = 0;j < n; j++)
  49. {
  50. printf("%s\n",str[r]);
  51. }
  52. return 0;
  53. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int cmp(const void * a, const void * b) {
  6.     return strcmp(*(char**)b, *(char**)a);
  7. }
  8.  
  9. typedef char string_t[256];
  10. #define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
  11.  
  12. #define MAX_WORDS (256)
  13. #define DELIM " ,\t\n"
  14.  
  15. int main(void) {
  16.     string_t str;
  17.    
  18.     while ( printf("String: ") && get_string(str) ) {
  19.         char * words[MAX_WORDS], * p = strchr(str, '.');
  20.         int count = 0;
  21.        
  22.         if ( p )
  23.             *p = '\0';
  24.        
  25.         for ( p = strtok(str, DELIM); p && count < MAX_WORDS; p = strtok(NULL, DELIM) )
  26.             words[count++] = p;
  27.        
  28.         qsort(words, count, sizeof(char*), cmp);
  29.        
  30.         while ( count )
  31.             printf("%s\n", words[--count]);
  32.     }
  33.    
  34.     return 0;
  35. }

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

В этом коде на языке 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы