Упорядочить строковый массив тремя способами - C (СИ)
Формулировка задачи:
Дан строковый массив .Размер и элементы вводятся пользователем.Упорядочить массив тремя способами :в порядке убывания длины строк;в обратном алфавитном порядке первых пяти символов элементов ;в порядке убывания количества согласных букв среди символов элементов.В функцию сортировки должен передаваться указатель на функцию сравнения двух элементов.Способ сортировки выбирает пользователь.
Решение задачи: «Упорядочить строковый массив тремя способами»
textual
Листинг программы
#ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include <ctype.h> #include <stdlib.h> #include <stdio.h> #include <string.h> char** create_array(size_t size) { size_t i = 0; char** array = (char**)malloc(sizeof(char*) * size); for (i = 0; i < size; i++) array[i] = (char*)malloc(sizeof(char) * BUFSIZ); return array; } void free_array(char** arr, size_t size) { size_t i = 0; for (i = 0; i < size; i++) free(arr[i]); free(arr); } #ifdef __STDC_VERSION && (__STDC_VERSION__ >= 201112L) #define GETS_S(str, size) gets_s(str, size) #elif _MSC_VER #define GETS_S(str, size) gets_s(str, size) #else #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) #define GETS_S(str, size) scanf("%" STR(size) "[^\n]%*c", str) #endif int by_string_length(const void* p1, const void* p2) { return strlen((const char*)p1) - strlen((const char*)p2); } int ndesc_string(const void* p1, const void* p2) { return strncpy((const char*)p2, (const char*)p1, 5); } void dump(const char** array, size_t size) { while (size--) puts(*array++); } int main(void) { size_t i = 0; size_t size; size_t sort_mode = 0; char **array; if (printf("Array size:") && (scanf("%u", &size) == 1) && ((array = create_array(size)) != NULL)) { fflush(stdin); for (i = 0; i < size; i++) { if (!(printf(">") && GETS_S(array[i], BUFSIZ))) { fprintf(stderr, "Error string enter"); return EXIT_FAILURE; } } puts("Sort mode:\n1. By length\n2. Descendant by first 5 characters"); if (scanf("%u", &sort_mode) != 1 && sort_mode != 1 && sort_mode != 2) { fprintf(stderr, "Invalid sort mode"); return EXIT_FAILURE; } switch (sort_mode) { case 1: qsort(array, size, sizeof(char*), by_string_length); dump(array, size); break; case 2: qsort(array, size, sizeof(char*), ndesc_string); dump(array, size); break; } free_array(array, size); return EXIT_SUCCESS; } else { fprintf(stderr, "Error array size"); return EXIT_FAILURE; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д