간단 문제 풀이

[C 문자] 문자열의 길이대로 정렬

nodeal 2017. 12. 22. 17:46
반응형

5개의 문자열을 받아 긴 문자열부터 출력


입력)

00000

00

000

0

0000


출력)

0

00

000

0000

00000


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(const void *, const void *); // 비교 함수 선언 

int main() { 
     unsigned int input_length = 5; 
     char **input = (char **) malloc(sizeof(char *) * input_length); // 문자열 저장 포인터 

     for (unsigned int i = 0; i < input_length; i++) { 
            *(input + i) = (char *) malloc(sizeof(char) * 10); // 9개의 문자를 받을 수 있는 문자열 
            gets(*(input + i)); // gets가 위험한 함수 판정은 받았지만 공백있는 문자열 입력에 가장 쉬움.
     } 

     printf("\n"); 
     qsort(input, input_length, sizeof(char *), compare); // stdlib.h의 Quick sort 함수. 정렬할 대상, 정렬할 길이, 정렬할 대상의 하나의 크기, 비교 함수를 인수로 받음. 

     for (unsigned int i = 0; i < input_length; i++) { 
            printf("%s\n", *(input + i)); 
            free(*(input + i)); 
     } 

     free(input); 

     return 0; 
} 

int compare(const void *compare1, const void *compare2) { // 비교 함수 정의 
     return strcmp(*(const char **) compare1, *(const char **) compare2); // strcmp로 간단히 길이 비교 가능 
} 


반응형