끄적끄적

반응형

문자열을 정렬, 즉 가나다 순으로 소팅하는 예제입니다. 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



반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]