Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ฟังก์ชัน strcoll() ในภาษา C

ความหมาย

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)