본문 바로가기

컴퓨터/언어,프로그래밍

문자열 배열 정렬(소트;Sort)역순 소팅, qsort 함수 사용법

문자열을 정렬, 즉 가나다 순으로 소팅하는 예제입니다. stdlib.h 헤더파일에 정의되어 있는 qsort() 함수로 쉽고 빠르게 정렬할 수 있습니다.

정수 배열을 소팅하는 법은 여기에 있습니다: ▶▶ C언어] 숫자 정수 int 배열 정렬(소트Sort소팅) 역순/내림차순 정렬


문자열 정렬 예제 소스 코드


파일명: 0.cpp
#include <stdio.h>
#include <stdlib.h> // qsort()
#include <string.h> // strcmp()

int comparisonFunctionString(const void *a, const void *b);


int main(void) {
  const int ELEMENTS = 8; // 요소 개수

  char array[ELEMENTS][6 + 1] = {
                                 "맹구",
                               "배용준",
                               "땡칠이",
                               "장동건",
                               "강수정",
                               "송창식",
                               "황당해",
                               "고은아" };


  qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionString);

  for (int i = 0; i < ELEMENTS; i++)
    printf("%s\n", array[i]);

  return 0;
}




int comparisonFunctionString(const void *a, const void *b) {
  return( strcmp( (char *)a, (char *)b) );
}


  qsort() 함수의 파라미터:

    * 배열의 "0번째 요소" 포인터
    * 배열의 요소 개수
    * 각 요소 하나의 크기를 바이트로
    * 비교 함수


qsort() 는, 요소들을 실제로 어떻게 비교할지 정하는 "비교 함수"를 필요로 합니다. 여기서는 comparisonFunctionString() 함수가 비교 함수입니다. 문자열의 순서를 비교합니다.



실행 결과:
D:\Z>cl 0.cpp && 0.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

0.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:0.exe
0.obj
강수정
고은아
땡칠이
맹구
배용준
송창식
장동건
황당해

D:\Z>


qsort() 속의 comparisonFunctionString 함수에
comparisonFunctionString() 이렇게 괄호를 붙이면 error C2660: 'comparisonFunctionString' : function does not take 0 arguments 이런 에러가 납니다.


또한, 위의 소스 파일의 확장자가 .cpp 가 아닌, .c 라면 에러가 납니다.




역순(Descending Order;내림차순)으로 정렬


다음과 같이, (char *)b 와 (char *)a 의 위치를 바꾸어 주면, 문자열이 역순으로 정렬됩니다.

int comparisonFunctionString(const void *a, const void *b) {
  return( strcmp( (char *)b, (char *)a) );
}



역순 정렬 결과:
황당해
장동건
송창식
배용준
맹구
땡칠이
고은아
강수정



영문 문자열 대소문자 구분 없이 정렬 방법: ▶▶ C언어] 대소문자 구분 없이 문자열 배열 정렬/소트/소팅; Sort Ignore Case, String Array


제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...