strcmp และการเปรียบเทียบ
เปรียบเทียบสตริง
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- strlen, strcpy, strcat
- strcmp และการเปรียบเทียบ
- strtok และการแยกโทเคน
- memcpy และ memset