ฟังก์ชัน strcmp ในภาษา C: คู่มือฉบับสมบูรณ์สำหรับการเปรียบเทียบสตริง

ในการเปรียบเทียบสตริงในภาษา C คุณใช้อะไร? strcmp เป็นฟังก์ชันที่ใช้ตรวจสอบว่าสองสตริงเหมือนกันหรือไม่ เหมือนกับการถามโปรแกรมว่า “สองอันนี้เหมือนกันไหม?” แน่นอนว่าโปรแกรมไม่สามารถตัดสินได้ว่าแมวกับหมาอันไหนน่ารักกว่ากัน แต่อย่างน้อยก็สามารถแยกความแตกต่างระหว่าง “HELLO” กับ “hello” ได้ ในบทความนี้ เราจะอธิบายเกี่ยวกับกลไกและวิธีการใช้งานของ strcmp รวมถึงจุดที่มักเข้าใจผิด

1. ฟังก์ชัน strcmp คืออะไร?

ฟังก์ชัน strcmp เป็นฟังก์ชันที่เปรียบเทียบสองสตริงทีละตัวอักษรและส่งคืนค่าจำนวนเต็มเป็นผลลัพธ์ ฟังก์ชันนี้ทำงานดังนี้:

  • 0: หากสตริงตรงกัน
  • ค่าบวก: หากสตริงแรกอยู่ถัดไปตามลำดับพจนานุกรม
  • ค่าลบ: หากสตริงแรกอยู่ก่อนตามลำดับพจนานุกรม

ฟังก์ชันนี้ไม่เพียงแต่ตรวจสอบว่าสตริงทั้งหมดเหมือนกันหรือไม่ แต่ยังสามารถกำหนดได้ว่าสตริงใดมาก่อน ในโปรแกรม สามารถใช้งานได้ง่ายๆ ดังนี้:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2);
    printf("strcmpの結果: %dn", result);
    return 0;
}

โค้ดด้านบนเปรียบเทียบ “Hello” และ “World” และแสดงผลลัพธ์ จุดสำคัญคือ strcmp แยกแยะระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ดังนั้น “HELLO” และ “hello” จะถูกพิจารณาว่าเป็นสตริงที่แตกต่างกัน

2. หลักการทำงานของฟังก์ชัน strcmp

การทำงานของ strcmp นั้นเรียบง่ายแต่ทรงพลัง มันจะเปรียบเทียบสตริงสองสตริงทีละตัวอักษรจากตัวแรก และส่งคืนความแตกต่างเมื่อพบตัวอักษรที่แตกต่างกัน กลไกนี้สามารถนำไปใช้กับการเปรียบเทียบตามลำดับตัวอักษรได้เช่นกัน ตัวอย่างเช่น เมื่อเปรียบเทียบ “apple” กับ “banana” strcmp จะเปรียบเทียบ “a” กับ “b” ก่อน และส่งคืนค่าลบ

ต่อไปนี้เป็นตัวอย่างโปรแกรมเพื่อทำความเข้าใจกลไกของ strcmp ให้มากขึ้น:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("文字列は一致しています。n");
    } else if (result < 0) {
        printf("str1はstr2より前にあります。n");
    } else {
        printf("str1はstr2より後にあります。n");
    }

    return 0;
}

ในโค้ดนี้ เรากำลังเปรียบเทียบ “apple” กับ “banana” ผลลัพธ์คือ strcmp จะบอกเราว่า “apple” อยู่ก่อน “banana” ตามลำดับพจนานุกรม ซึ่งมีประโยชน์เมื่อต้องการเรียงลำดับสตริงตามลำดับพจนานุกรม

侍エンジニア塾

3. ตัวอย่างการใช้งานฟังก์ชัน strcmp

1. การตรวจสอบข้อมูลที่ผู้ใช้ป้อน

strcmp มีประโยชน์เมื่อต้องการเปรียบเทียบข้อมูลที่ผู้ใช้ป้อนกับข้อมูลที่มีอยู่แล้ว ตัวอย่างเช่น สามารถใช้ในการตรวจสอบการตรงกันของรหัสผ่านได้

#include <stdio.h>
#include <string.h;

int main() {
    char password[] = "secret";
    char input[256];

    printf("パスワードを入力してください: ");
    scanf("%s", input);

    if (strcmp(password, input) == 0) {
        printf("パスワードが一致しました。n");
    } else {
        printf("パスワードが間違っています。n");
    }

    return 0;
}

โปรแกรมนี้ใช้ strcmp เพื่อเปรียบเทียบรหัสผ่านที่ป้อนกับรหัสผ่านที่ถูกต้อง

2. การจัดเรียงตามลำดับพจนานุกรม

strcmp ยังมีประโยชน์ในการจัดเรียงสตริงตามลำดับพจนานุกรม เมื่อต้องการเรียงคำหลายๆ คำ สามารถใช้ strcmp เพื่อกำหนดว่าคำใดควรจะมาก่อน

4. ทางเลือกอื่นสำหรับฟังก์ชัน strcmp

strcmp มีประโยชน์มาก แต่ในบางกรณีอาจต้องพิจารณาใช้ฟังก์ชันอื่นตามการใช้งาน

strncmp: การเปรียบเทียบสตริงย่อย

strncmp ใช้เมื่อต้องการเปรียบเทียบเพียงบางส่วนของสตริง ตัวอย่างเช่น ใช้เมื่อต้องการเปรียบเทียบสามตัวอักษรแรกของสตริง

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "apricot";

    if (strncmp(str1, str2, 3) == 0) {
        printf("最初の3文字は一致しています。n");
    } else {
        printf("最初の3文字は一致していません。n");
    }

    return 0;
}

memcmp: การเปรียบเทียบหน่วยความจำ

memcmp เป็นฟังก์ชันที่ใช้เปรียบเทียบหน่วยความจำทั้งหมด ไม่ใช่แค่สตริง มีประโยชน์เมื่อต้องการเปรียบเทียบข้อมูลไบนารี

5. ข้อผิดพลาดที่พบบ่อย

1. ไม่พิจารณาความแตกต่างระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก

strcmp แยกแยะระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ตัวอย่างเช่น “HELLO” และ “hello” จะถูกพิจารณาว่าแตกต่างกัน หากต้องการการเปรียบเทียบที่ไม่คำนึงถึงตัวพิมพ์ ให้พิจารณาใช้ strcasecmp

2. การเปรียบเทียบ NULL pointer

การเปรียบเทียบ NULL pointer ด้วย strcmp อาจทำให้โปรแกรม crash ได้ สิ่งสำคัญคือต้องตรวจสอบให้แน่ใจว่าสตริงที่จะเปรียบเทียบได้รับการเริ่มต้นอย่างถูกต้อง

สรุป

strcmp เป็นฟังก์ชันที่สำคัญมากในภาษา C และช่วยให้เปรียบเทียบสตริงได้อย่างง่ายดาย เราได้อธิบายพร้อมแสดงตัวอย่างการใช้งานจริงในโปรแกรม เช่น การตรวจสอบรหัสผ่านและการจัดเรียงสตริง ลองสัมผัสความสะดวกของฟังก์ชันนี้ในการจัดการสตริงในโปรแกรมของคุณ

年収訴求