C Academy · บทเรียน

strcmp และการเปรียบเทียบ

เปรียบเทียบสตริง

บทเรียน 2 จาก 413 ขั้นตอน

strcmp และการเปรียบเทียบ เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

การเปรียบเทียบสตริง

คุณไม่สามารถเปรียบเทียบสตริงด้วย == ในภาษา C ได้ เพราะจะเปรียบเทียบเฉพาะที่อยู่ของอาร์เรย์สองชุด ไม่ใช่เนื้อหาภายใน

ใช้ strcmp(a, b) จาก <string.h> เพื่อเปรียบเทียบทีละอักขระ

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

int main(void) {
    char a[] = "apple";
    char b[] = "apple";
    if (strcmp(a, b) == 0)
        printf("Strings are equal\n");
    return 0;
}

ค่า a ที่ strcmp ส่งกลับ

strcmp ส่งกลับค่า int:

  • 0 หากสตริงเท่ากัน
  • ค่าที่ติดลบ หาก char ตัวแรกที่แตกต่างกันใน a มีค่าน้อยกว่าใน b
  • ค่าที่เป็นบวกในกรณีอื่น
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("abc", "abc"));
    printf("%d\n", strcmp("abc", "abd"));
    printf("%d\n", strcmp("abd", "abc"));
    return 0;
}

กับดักศูนย์หมายถึงเท่ากัน

ข้อผิดพลาดที่พบบ่อยคือเขียน if (strcmp(a, b)) โดยคาดว่าจะหมายถึงสตริงเท่ากัน

โปรดจำไว้ว่า strcmp ส่งกลับค่า 0 (ถือเป็นเท็จ) เมื่อสตริงเท่ากัน ดังนั้นเงื่อนไขนี้จะเป็นจริงเมื่อสตริงแตกต่างกัน ควรเปรียบเทียบกับ 0 อย่างชัดเจนเสมอ

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

int main(void) {
    char input[] = "yes";
    if (strcmp(input, "yes") == 0)
        printf("Confirmed\n");
    else
        printf("Not confirmed\n");
    return 0;
}

การทำงานของการเปรียบเทียบ

strcmp เปรียบเทียบค่า ASCII (ไบต์) ของอักขระทีละตัวจนกว่าจะพบความแตกต่างหรือถึงตัวสิ้นสุดสตริง

ตัวอักษรพิมพ์ใหญ่ (A=65) มาก่อนตัวอักษรพิมพ์เล็ก (a=97) ดังนั้น "Zebra" จึงเรียงก่อน "apple"

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

int main(void) {
    printf("%d\n", strcmp("Zebra", "apple"));
    return 0;
}

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

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

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

int main(void) {
    const char *x = "banana";
    const char *y = "cherry";
    if (strcmp(x, y) < 0)
        printf("%s comes before %s\n", x, y);
    return 0;
}

strncmp: การเปรียบเทียบแบบจำกัดจำนวน

strncmp(a, b, n) จะเปรียบเทียบอักขระไม่เกิน n ตัว เหมาะสำหรับตรวจสอบคำนำหน้า

ตัวอย่างเช่น การทดสอบว่าสตริงเริ่มต้นด้วย "http" หรือไม่

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

int main(void) {
    char url[] = "https://site.com";
    if (strncmp(url, "https", 5) == 0)
        printf("Secure URL\n");
    return 0;
}

การเปรียบเทียบโดยไม่คำนึงถึงตัวพิมพ์

strcmp มาตรฐานคำนึงถึงตัวพิมพ์ หากต้องการไม่คำนึงถึงตัวพิมพ์ คุณสามารถใช้ tolower จาก <ctype.h> เพื่อแปลงอักขณะเปรียบเทียบ

(ระบบ POSIX ยังมี strcasecmp ให้ใช้ แต่ฟังก์ชันนี้ไม่ได้อยู่ในมาตรฐานภาษา C)

#include <stdio.h>
#include <ctype.h>

int ci_cmp(const char *a, const char *b) {
    while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
    return tolower(*a) - tolower(*b);
}

int main(void) {
    printf("%d\n", ci_cmp("Hello", "hello"));
    return 0;
}

การค้นหาด้วยการเปรียบเทียบ

คุณสามารถวนซ้ำผ่านอาร์เรย์ของสตริงและใช้ strcmp เพื่อค้นหาค่าที่ตรงกันได้ คล้ายตารางค้นหาอย่างง่าย

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

int main(void) {
    const char *fruits[] = {"apple", "banana", "cherry"};
    const char *target = "banana";
    for (int i = 0; i < 3; i++) {
        if (strcmp(fruits[i], target) == 0) {
            printf("Found at index %d\n", i);
        }
    }
    return 0;
}

การเรียงลำดับสตริง

เมื่อใช้ strcmp เป็นกลไก คุณสามารถเรียงลำดับอาร์เรย์ของสตริงได้ ต่อไปนี้คือตัวอย่างการเรียงลำดับแบบฟองขนาดเล็กที่สลับตัวชี้ตามลำดับ

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

int main(void) {
    const char *names[] = {"Carol", "Alice", "Bob"};
    int n = 3;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (strcmp(names[j], names[j+1]) > 0) {
                const char *t = names[j];
                names[j] = names[j+1];
                names[j+1] = t;
            }
    for (int i = 0; i < n; i++) printf("%s\n", names[i]);
    return 0;
}

อย่าเปรียบเทียบด้วยการลบโดยตรง

คุณอาจลองเขียนการเปรียบเทียบเองด้วย a[i] - b[i] แต่สำหรับค่า char ดิบ พฤติกรรมของเครื่องหมายขึ้นอยู่กับการนำไปใช้งาน และอาจทำให้ค่าเกินช่วงได้

ควรเลือกใช้ไลบรารี strcmp ซึ่งจัดการกรณีขอบเหล่านี้ได้อย่างถูกต้อง

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

int main(void) {
    int r = strcmp("file1", "file2");
    printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
    return 0;
}

การเปรียบเทียบข้อมูลนำเข้าจากผู้ใช้

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

ควรเปรียบเทียบกับ 0 เพื่อทดสอบความเท่ากันเสมอ

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

int main(void) {
    char choice[] = "quit";
    if (strcmp(choice, "quit") == 0)
        printf("Exiting program\n");
    return 0;
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับค่าที่ strcmp ส่งกลับ

สรุปทบทวน

คุณได้เรียนรู้วิธีเปรียบเทียบสตริงในภาษา C:

  • strcmp ส่งกลับ 0 เมื่อเท่ากัน และส่งกลับค่าลบหรือบวกเพื่อบอกลำดับ
  • ห้ามใช้ == กับสตริง เพราะเป็นการเปรียบเทียบที่อยู่
  • ควรทดสอบ == 0 เพื่อดูว่าสตริงเท่ากันเสมอ (กับดักศูนย์ถือเป็นเท็จ)
  • strncmp เปรียบเทียบคำนำหน้า ส่วนการไม่คำนึงถึงตัวพิมพ์ต้องใช้ tolower
เริ่มต้นได้ฟรี

เรียนรู้ C ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
39
บทเรียน
144

คำถามที่พบบ่อย

บทเรียน “strcmp และการเปรียบเทียบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “strcmp และการเปรียบเทียบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “strcmp และการเปรียบเทียบ”

เปรียบเทียบสตริง คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “strcmp และการเปรียบเทียบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. strlen, strcpy, strcat
  2. strcmp และการเปรียบเทียบ
  3. strtok และการแยกโทเคน
  4. memcpy และ memset
← กลับไปที่ C Academy