ยอมรับสารภาพเลยว่าเลิกเขียนโปรแกรมภาษา C ในอดีตเมื่อหลายปีก่อนก็เพราะการเปรียบเทียบสตริงนี่แหละ ทำไม่ได้หาในหนังสือไม่มีวิธีแก้ไข สมัยนั้นยังไม่มี google และหนังสือก็มีน้อย เงินซื้อหนังสือก็น้อยด้วย
ตัวอย่างเช่น
char a = "Hello";
char b = "Hello";
เมื่อใช้คำสั่ง if (a == b) printf("%s", a); บรรทัดนี้ไม่มีการพิมพ์ค่า ตัวแปร a ออกทางหน้าจออย่างแน่นอน และทำให้ท้อแล้วเลิกเขียนภาษา C เลยเชียว เพราะภาษาอื่นเขาทำได้
แต่สำหรับใครที่ใช้ C++ ก็ง่ายเลย ตัวแปรสตริงเปรียบเทียบกันตรงๆ ได้ เช่น
string a = "Hello";
string b = "Hello";
if (a == b) std::cout << a << std::endl;
คำสั่งนี้แสดงค่าตัวแปร a ออกทางหน้าจออย่างแน่นอน แล้วทำไมภาษา C ถึงทำไม่ได้ล่ะ
ง่ายๆ คือ ถ้าเราเอาตัวแปร char [] มาเปรียบเทียบกัน จะเป็นการเปรียบเทียบ address หรือตำแหน่งเก็บของตัวแปร ดังนั้นจึงไม่มีทางที่จะเท่ากันได้ ผลลัพธ์จึงเป็น false เสมอ
วิธีการเปรียบเทียบทำได้สองอย่าง สำหรับภาษา C
1. ใช้ฟังค์ชัน strcmp()
ในภาษา C มีฟังค์ชันสำหรับเปรียบเทียบสตริงให้เรียบร้อยใช้งานง่ายๆ ไม่ยุ่งยาก เช่น
char a[] = "Hello";
char b[] = "Hello";
if (strcmp(a, b) == 0){
//ถ้าเปรียบเทียบแล้วได้เท่ากับ 0 แสดงว่าข้อความนั้นเหมือนกันทุกประการ
}
2. เขียนโปรแกรมตรวจสอบเอง
วิธีการนี้ทำให้ทราบถึงหลักการเท่านั้น เวลาใช้งานจริงไม่ต้องเขียนเองใช้คำสั่ง strcmp() แทนเลย
char a[] = "Hello";
char b[] = "Hello";
int i = 0; //เริ่มตรวจสอบสมาชิกอะเรย์ที่ 0 ไปเรื่อยๆ
while (1){
if (c[i] != d[i]){ //ถ้ามีสมาชิกที่ i ไม่ตรงกันก็ให้สิ้นสุดตรวจสอบ (ไม่เท่ากัน)
printf("Not equal");
break;
}
if (c[i] == '\0' && d[i] == '\0'){ //ถ้าสมาชิกที่ i ของ c และ d เป็น \0 ถือว่าตรงกัน
printf("Equal");
break;
}
i++;
}
และที่สำคัญอีกประการหนึ่ง a[] = "Hello" กับ *b = "Hello" ก็เป็นตัวแปรต่างชนิดกัน a เป็น Array และ b เป็น Pointer ด้งนั้นควรระวังและละเอียดอ่อนกับการเขียนโปรแกรมสักนิดก็จะไม่เจอปัญหาชวนปวดหัวนะครับ ...
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
Gtk4 ตอนที่ 6 Defining a Child object
Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...
-
นักอิเลกโทรนิกส์ทั้งหลายคงจะเข้าใจวิธีวัดค่าของไดโอดเปล่งแสง หรือ LED เป็นอย่างดี แต่สำหรับมือใหม่ ย่อมต้องเรียนรู้ หาประสบการณ์ต่อไปเรื่อยๆ...
-
Ubuntu เป็น OS ที่นิยมนำมาใช้เป็นเซิร์ฟเวอร์อย่างแพร่หลาย ด้วยการติดตั้งง่าย การแก้ไขปัญหาก็ทำได้ดีเพราะมีเอกสาร คนใช้งานอยู่มาก และโดยปกติ ...
-
ยอมรับสารภาพเลยว่าเลิกเขียนโปรแกรมภาษา C ในอดีตเมื่อหลายปีก่อนก็เพราะการเปรียบเทียบสตริงนี่แหละ ทำไม่ได้หาในหนังสือไม่มีวิธีแก้ไข สมัยนั้นยั...
ไม่มีความคิดเห็น:
แสดงความคิดเห็น