Символы в словах исходной строки записать в алфавитном порядке - 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;
}
Объяснение кода листинга программы
- Предполагается, что пользователь вводит строку.
- Строка сохраняется в переменной типа char, затем копируется в другую строку типа char.
- В функции func происходит сортировка символов в каждом слове.
- Сортировка происходит с помощью функции qsort, которая сортирует символы в порядке возрастания без учета регистра.
- Функция cmp сравнивает символы, преобразуя их в нижний регистр с помощью функции tolower.
- В функции main вводится строка с помощью функции fgets, затем вызывается функция func для сортировки строки, и результат выводится на экран.