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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
//-----------------------------------------------------------------------------
int getWord(const char str[],
            const char** begin,
            const char** end) {
    for (; *str && isspace(*str); ++str) { ; }
    *begin = str;
 
    for (; *str && !isspace(*str); ++str) { ; }
    *end = str;
 
    return *end - *begin;
}
//-----------------------------------------------------------------------------
int cmp(const void* a, const void* b) {
    return tolower(*(char*)a) - tolower(*(char*)b);
}
//-----------------------------------------------------------------------------
char* func(const char src[], char dst[]) {
    char* result = dst;
    const char* begin, * end;
    int len;
 
    while ((len = getWord(src, &begin, &end))) {
        strncpy(result, begin, len);
        qsort(result, len, sizeof(char), cmp);
        result += len;
        *result++ = ' ';
        src = end;
    }
 
    if (dst < result) {
        result--;
    }
 
    *result = 0;
 
    return dst;
}
//-----------------------------------------------------------------------------
 
#define MAXLEN 128
 
int main() {
    char source[MAXLEN], result[MAXLEN];
 
    if (fgets(source, MAXLEN, stdin)) {
        printf("[%s]\n", func(source, result));
    }
 
    return 0;
}

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

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

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


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

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

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