문자열을 정렬, 즉 가나다 순으로 소팅하는 예제입니다. stdlib.h 헤더파일에 정의되어 있는 qsort() 함수로 쉽고 빠르게 정렬할 수 있습니다.
정수 배열을 소팅하는 법은 여기에 있습니다: ▶▶ C언어] 숫자 정수 int 배열 정렬(소트Sort소팅) 역순/내림차순 정렬
파일명: 0.cpp
qsort() 는, 요소들을 실제로 어떻게 비교할지 정하는 "비교 함수"를 필요로 합니다. 여기서는 comparisonFunctionString() 함수가 비교 함수입니다. 문자열의 순서를 비교합니다.
실행 결과:
qsort() 속의 comparisonFunctionString 함수에
comparisonFunctionString() 이렇게 괄호를 붙이면 error C2660: 'comparisonFunctionString' : function does not take 0 arguments 이런 에러가 납니다.
또한, 위의 소스 파일의 확장자가 .cpp 가 아닌, .c 라면 에러가 납니다.
다음과 같이, (char *)b 와 (char *)a 의 위치를 바꾸어 주면, 문자열이 역순으로 정렬됩니다.
역순 정렬 결과:
정수 배열을 소팅하는 법은 여기에 있습니다: ▶▶ 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) );
}
#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번째 요소" 포인터
* 배열의 요소 개수
* 각 요소 하나의 크기를 바이트로
* 비교 함수
* 배열의 "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>
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) );
}
return( strcmp( (char *)b, (char *)a) );
}
역순 정렬 결과:
황당해
장동건
송창식
배용준
맹구
땡칠이
고은아
강수정
장동건
송창식
배용준
맹구
땡칠이
고은아
강수정
영문 문자열 대소문자 구분 없이 정렬 방법: ▶▶ C언어] 대소문자 구분 없이 문자열 배열 정렬/소트/소팅; Sort Ignore Case, String Array
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
Quick Sort 알고리즘 (0) | 2009.06.10 |
---|---|
전처리문에 대한 설명 (0) | 2009.06.09 |
두개의 16비트 데이터를 32비트로 만드는 방법들 (0) | 2009.06.09 |
퀵정렬(Quick Sort)이란? (0) | 2009.06.09 |
C언어 정수,실수 데이터형 (0) | 2009.06.09 |