ความหมาย
strcoll() เปรียบเทียบ string สองตัวตาม locale ปัจจุบัน (LC_COLLATE) แตกต่างจาก strcmp ที่เปรียบเทียบตามค่า ASCII โดยตรง
Prototype
int strcoll(const char *str1, const char *str2);
คืนค่า
- > 0 - str1 มากกว่า str2 ตาม locale
- < 0 - str1 น้อยกว่า str2 ตาม locale
- = 0 - ทั้งสอง string เท่ากัน
ความแตกต่าง strcmp vs strcoll
| ฟังก์ชัน | มาตรฐานการเปรียบเทียบ | ใช้เมื่อ |
|---|---|---|
| strcmp | ค่า ASCII/Unicode โดยตรง | เปรียบเทียบทั่วไป ไม่สนใจภาษา |
| strcoll | ตาม locale (LC_COLLATE) | เปรียบเทียบตามกฎภาษาท้องถิ่น (ไทย, ญี่ปุ่น, เยอรมัน ฯลฯ) |
ตัวอย่างโปรแกรมที่ 1: Hardcoded Strings
#include <stdio.h>
#include <string.h>
#include <locale.h>
int main() {
setlocale(LC_COLLATE, ""); // ใช้ locale ของระบบ
char string1[20] = "WELCOME";
char string2[20] = "Welcome to the world!";
int result = strcoll(string1, string2);
if (result > 0)
printf("string1 มากกว่า string2\\n");
else if (result < 0)
printf("string1 น้อยกว่า string2\\n");
else
printf("string1 เท่ากับ string2\\n");
return 0;
}ผลลัพธ์
string1 น้อยกว่า string2
ตัวอย่างโปรแกรมที่ 2: รับ Input จากผู้ใช้
#include <stdio.h>
#include <string.h>
#include <locale.h>
int main() {
setlocale(LC_COLLATE, "");
char string1[20], string2[20];
int result;
printf("ป้อน string1: ");
fgets(string1, sizeof(string1), stdin);
string1[strcspn(string1, "\\n")] = '\\0';
printf("ป้อน string2: ");
fgets(string2, sizeof(string2), stdin);
string2[strcspn(string2, "\\n")] = '\\0';
result = strcoll(string1, string2);
if (result > 0)
printf("string1 มากกว่า string2\\n");
else if (result < 0)
printf("string1 น้อยกว่า string2\\n");
else
printf("string1 เท่ากับ string2\\n");
return 0;
}ผลลัพธ์ตัวอย่าง
ป้อน string1: Tutorials Point ป้อน string2: Point string1 มากกว่า string2
คำอธิบาย
ใน locale ภาษาอังกฤษ มักจะเรียงลำดับว่าตัวพิมพ์ใหญ่ (A-Z) มาก่อนตัวพิมพ์เล็ก (a-z) แต่ในบาง locale อาจแตกต่างออกไป
หมายเหตุ
- ต้อง include
<string.h>และ<locale.h> - ควรเรียก
setlocale(LC_COLLATE, "")ก่อนใช้งาน - ผลลัพธ์ขึ้นอยู่กับ locale setting ของระบบ
- สำคัญสำหรับ internationalization (i18n)