Символы в словах исходной строки записать в алфавитном порядке - C (СИ)

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. //-----------------------------------------------------------------------------
  7. int getWord(const char str[],
  8.             const char** begin,
  9.             const char** end) {
  10.     for (; *str && isspace(*str); ++str) { ; }
  11.     *begin = str;
  12.  
  13.     for (; *str && !isspace(*str); ++str) { ; }
  14.     *end = str;
  15.  
  16.     return *end - *begin;
  17. }
  18. //-----------------------------------------------------------------------------
  19. int cmp(const void* a, const void* b) {
  20.     return tolower(*(char*)a) - tolower(*(char*)b);
  21. }
  22. //-----------------------------------------------------------------------------
  23. char* func(const char src[], char dst[]) {
  24.     char* result = dst;
  25.     const char* begin, * end;
  26.     int len;
  27.  
  28.     while ((len = getWord(src, &begin, &end))) {
  29.         strncpy(result, begin, len);
  30.         qsort(result, len, sizeof(char), cmp);
  31.         result += len;
  32.         *result++ = ' ';
  33.         src = end;
  34.     }
  35.  
  36.     if (dst < result) {
  37.         result--;
  38.     }
  39.  
  40.     *result = 0;
  41.  
  42.     return dst;
  43. }
  44. //-----------------------------------------------------------------------------
  45.  
  46. #define MAXLEN 128
  47.  
  48. int main() {
  49.     char source[MAXLEN], result[MAXLEN];
  50.  
  51.     if (fgets(source, MAXLEN, stdin)) {
  52.         printf("[%s]\n", func(source, result));
  53.     }
  54.  
  55.     return 0;
  56. }

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

  1. Предполагается, что пользователь вводит строку.
  2. Строка сохраняется в переменной типа char, затем копируется в другую строку типа char.
  3. В функции func происходит сортировка символов в каждом слове.
  4. Сортировка происходит с помощью функции qsort, которая сортирует символы в порядке возрастания без учета регистра.
  5. Функция cmp сравнивает символы, преобразуя их в нижний регистр с помощью функции tolower.
  6. В функции main вводится строка с помощью функции fgets, затем вызывается функция func для сортировки строки, и результат выводится на экран.

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


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

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

11   голосов , оценка 4.091 из 5

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

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

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