Выбрать буквы в строке и отсортировать - C (СИ)
Формулировка задачи:
Может кто помочь? И задачка то вроде простая, и в гугле материала навалом, но сделать из этого профит не могу.
С клавиатуры вводится строка. Выберете из нее все буквы от J (j) до S (s) (строчные преобразуйте в прописные) и отсортируйте их в алфавитном порядке.
Допустимые символы - прописные и строчные латинские буквы.
Пример: Исходная строка: SHiFOVkaOtSHPIonA Результат: KNOOOPRSS
Решение задачи: «Выбрать буквы в строке и отсортировать»
textual
Листинг программы
#include <stdlib.h> // qsort, toupper #include <string.h> // strlen #include <stdbool.h> // true #include <stdio.h> // puts, fflush, fgets #define BUF_SIZE 80 int tovalid(int c) { c = toupper(c); if( c < 'J' || c > 'S' ) { c = 0; } return c; } void filter(char* dst, char* src) { int c; while( c = (unsigned char) *src++ ) { if( c = tovalid(c) ) { *dst++ = c; } } *dst = '\0'; } int charcmp(const void* a, const void* b) { int code_a = *(unsigned char*)a; int code_b = *(unsigned char*)b; return code_a - code_b; } int main(void) { char input[BUF_SIZE]; char output[BUF_SIZE]; while( true ) { puts("Enter string:"); fflush(stdin); fgets(input, sizeof(input), stdin); if( input[0] == '\n' ) { break; } filter(output, input); puts(output); qsort(output, strlen(output), sizeof(char), charcmp); puts(output); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы со строками, массивами, сортировкой и вводом-выводом
- Определяем размер буфера в 80 символов
- Создаём функцию tovalid(), которая принимает символ и возвращает его в верхнем регистре, если он находится в допустимом диапазоне ('A'..'S')
- Создаём функцию filter(), которая принимает два указателя на строки (исходную и целевую), и перебирает символы исходной строки. Если символ проходит проверку в функции tovalid(), то он добавляется в целевую строку
- Создаём функцию charcmp(), которая принимает два указателя на символы и возвращает их разность. Эта функция будет использоваться при сортировке
- В функции main() создаём две строки (входную и выходную), затем в цикле запрашиваем у пользователя ввод строки, фильтруем её и сортируем с помощью функции qsort(). Выводим отсортированную строку на экран
- Код не содержит ошибок, но он не полностью функционален, так как не обрабатывает ситуацию, когда ввод строки пуст.