ในการเปรียบเทียบสตริงในภาษา 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 และช่วยให้เปรียบเทียบสตริงได้อย่างง่ายดาย เราได้อธิบายพร้อมแสดงตัวอย่างการใช้งานจริงในโปรแกรม เช่น การตรวจสอบรหัสผ่านและการจัดเรียงสตริง ลองสัมผัสความสะดวกของฟังก์ชันนี้ในการจัดการสตริงในโปรแกรมของคุณ