Sunday, December 31, 2006
C언어] 대소문자 구분 없이 문자열 배열 정렬/소트/소팅; Sort Ignore Case, String Array
영문이거나 영문이 섞인 문자열 배열을 qsort() 함수를 사용하여 ABC순으로 소트(Sort)할 때, 기본적으로 대소문자를 구분하여 소팅하기에 결과가 부자연스럽게 나옵니다. 대소문자 구분 없이 영문 문자열을 정렬하는 방법입니다.
소스 파일명: 0.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
▶▶ C언어] 문자열 배열 정렬(소트;Sort)역순 소팅, qsort 함수 사용법
영문 알파벳 대소문자 구분 없이, 문자 배열 소팅 예제
소스 파일명: 0.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
#include <stdio.h>
#include <stdlib.h> // qsort()
#include <string.h> // strcmp() stricmp()
int comparisonFunctionString(const void *a, const void *b);
int comparisonFunctionStringIgnoreCase(const void *a, const void *b);
int comparisonFunctionStringReverseIgnoreCase(const void *a, const void *b);
int main(void) {
const int ELEMENTS = 5; // 요소 개수
char array[ELEMENTS][3 + 1]
= { "bbb", "AAA", "DDD", "CCC", "aaa" };
// 대소문자 구분하여 정렬
qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionString);
for (int i = 0; i < ELEMENTS; i++)
printf("%s\n", array[i]);
/*
AAA
CCC
DDD
aaa
bbb
*/
puts(""); // 줄바꿈
// 대소문자 구분 없이 정렬
qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionStringIgnoreCase);
for (int i = 0; i < ELEMENTS; i++)
printf("%s\n", array[i]);
/*
aaa
AAA
bbb
CCC
DDD
*/
puts(""); // 줄바꿈
// 대소문자 구분 없이 내림차순 정렬
qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionStringReverseIgnoreCase);
for (int i = 0; i < ELEMENTS; i++)
printf("%s\n", array[i]);
/*
DDD
CCC
bbb
AAA
aaa
*/
return 0;
}
int comparisonFunctionString(const void *a, const void *b) {
return( strcmp( (char *)a, (char *)b) );
}
int comparisonFunctionStringIgnoreCase(const void *a, const void *b) {
return( stricmp( (char *)a, (char *)b) );
}
int comparisonFunctionStringReverseIgnoreCase(const void *a, const void *b) {
return( stricmp( (char *)b, (char *)a) );
}
#include <stdlib.h> // qsort()
#include <string.h> // strcmp() stricmp()
int comparisonFunctionString(const void *a, const void *b);
int comparisonFunctionStringIgnoreCase(const void *a, const void *b);
int comparisonFunctionStringReverseIgnoreCase(const void *a, const void *b);
int main(void) {
const int ELEMENTS = 5; // 요소 개수
char array[ELEMENTS][3 + 1]
= { "bbb", "AAA", "DDD", "CCC", "aaa" };
// 대소문자 구분하여 정렬
qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionString);
for (int i = 0; i < ELEMENTS; i++)
printf("%s\n", array[i]);
/*
AAA
CCC
DDD
aaa
bbb
*/
puts(""); // 줄바꿈
// 대소문자 구분 없이 정렬
qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionStringIgnoreCase);
for (int i = 0; i < ELEMENTS; i++)
printf("%s\n", array[i]);
/*
aaa
AAA
bbb
CCC
DDD
*/
puts(""); // 줄바꿈
// 대소문자 구분 없이 내림차순 정렬
qsort((void *)array, ELEMENTS, sizeof(array[0]), comparisonFunctionStringReverseIgnoreCase);
for (int i = 0; i < ELEMENTS; i++)
printf("%s\n", array[i]);
/*
DDD
CCC
bbb
AAA
aaa
*/
return 0;
}
int comparisonFunctionString(const void *a, const void *b) {
return( strcmp( (char *)a, (char *)b) );
}
int comparisonFunctionStringIgnoreCase(const void *a, const void *b) {
return( stricmp( (char *)a, (char *)b) );
}
int comparisonFunctionStringReverseIgnoreCase(const void *a, const void *b) {
return( stricmp( (char *)b, (char *)a) );
}
▶▶ C언어] 문자열 배열 정렬(소트;Sort)역순 소팅, qsort 함수 사용법
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home