Выбрать буквы в строке и отсортировать - C (СИ)

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

Может кто помочь? И задачка то вроде простая, и в гугле материала навалом, но сделать из этого профит не могу. С клавиатуры вводится строка. Выберете из нее все буквы от J (j) до S (s) (строчные преобразуйте в прописные) и отсортируйте их в алфавитном порядке. Допустимые символы - прописные и строчные латинские буквы. Пример: Исходная строка: SHiFOVkaOtSHPIonA Результат: KNOOOPRSS

Код к задаче: «Выбрать буквы в строке и отсортировать - C (СИ)»

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;
}

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

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

13   голосов, оценка 4.385 из 5


СОХРАНИТЬ ССЫЛКУ