กลับไปหน้าบทความ

อ่าน 2 นาที

การจำแนกประเภทตัวอักษร C

การจำแนกประเภทอักขระ Cเป็นกลุ่มของการดำเนินการในไลบรารีมาตรฐาน Cที่ทดสอบอักขระว่าเป็นสมาชิกของกลุ่มอักขระใดโดยเฉพาะ เช่น อักขระตัวอักษรหรืออักขระควบคุม...

การจำแนกประเภทตัวอักษร C

การจำแนกประเภทอักขระ Cเป็นกลุ่มของการดำเนินการในไลบรารีมาตรฐาน Cที่ทดสอบอักขระว่าเป็นสมาชิกของกลุ่มอักขระใดโดยเฉพาะ เช่น อักขระตัวอักษรหรืออักขระควบคุม รองรับทั้งอักขระไบต์เดียวและอักขระกว้าง[ 1 ]

ประวัติศาสตร์

โปรแกรมเมอร์ภาษาซี ในยุคแรกๆที่ทำงานกับระบบปฏิบัติการUnix ได้พัฒนา รูปแบบการเขียนโปรแกรมเพื่อจำแนกประเภทของอักขระ ตัวอย่างเช่นโค้ด ต่อไปนี้ จะประเมินค่าเป็นจริงสำหรับอักขระตัวอักษรASCII : c

( 'A' <= c && c <= 'Z' ) || ( 'a' <= c && c <= 'z' )

ในที่สุด อินเทอร์เฟซสำหรับฟังก์ชันการจำแนกประเภทอักขระทั่วไปก็ได้รับการกำหนดไว้ในไฟล์ไลบรารีมาตรฐาน C ที่ ชื่อ ctype.h

การดำเนินการ

เพื่อประสิทธิภาพที่ดีขึ้น ฟังก์ชันการจำแนกประเภทอักขระมาตรฐานมักถูกนำไปใช้ในรูปแบบมาโครแทนที่จะเป็นฟังก์ชันแต่เนื่องจากข้อจำกัดของการประเมินมาโคร ปัจจุบันจึงโดยทั่วไปแล้วไม่ได้ถูกนำมาใช้ในรูปแบบเดียวกับในLinux เวอร์ชันแรกๆ เช่น:

#define isdigit(c) ((c) >= '0' && (c) <= '9')

สิ่งนี้อาจนำไปสู่ข้อผิดพลาดเมื่อพารามิเตอร์มาโครxถูกขยายเป็นนิพจน์ที่มีผลข้างเคียงตัวอย่างเช่น: isdigit(x++)หากการใช้งานเป็นฟังก์ชัน ค่า x จะเพิ่มขึ้นเพียงครั้งเดียว แต่สำหรับคำจำกัดความมาโครนี้ ค่า x จะเพิ่มขึ้นสองครั้ง

เพื่อแก้ไขปัญหานี้ วิธีการใช้งานทั่วไปคือการใช้การค้นหาในตารางสำหรับมาโคร ตัวอย่างเช่น ไลบรารีมาตรฐานมีอาร์เรย์ของจำนวนเต็ม 256 ตัว – หนึ่งตัวสำหรับค่าอักขระแต่ละค่า – ซึ่งแต่ละตัวประกอบด้วยฟิลด์บิตสำหรับแต่ละการจำแนกประเภทที่รองรับ มาโครจะอ้างอิงถึงจำนวนเต็มโดยใช้ดัชนีค่าอักขระและเข้าถึงฟิลด์บิตที่เกี่ยวข้อง ตัวอย่างเช่น หากบิตต่ำสุดระบุว่าอักขระนั้นเป็นตัวเลขหรือไม่isdigitมาโครสามารถเขียนได้ดังนี้:

#define isdigit(c) (TABLE[c] & 1)

อาร์กิวเมนต์มาโครcถูกอ้างอิงเพียงครั้งเดียว ดังนั้นจึงถูกประเมินเพียงครั้งเดียว

ภาพรวมของฟังก์ชันต่างๆ

ฟังก์ชันที่ใช้กับอักขระแบบไบต์เดียวถูกกำหนดไว้ในไฟล์เฮดเดอร์ctype.h ( cctypeใน C++) ส่วนฟังก์ชันที่ใช้กับอักขระแบบไบต์กว้างถูกกำหนดไว้ในไฟล์เฮดเดอร์wctype.h ( cwctypeใน C++)

การจัดประเภทจะได้รับการประเมินตามสถานที่ตั้งที่มีผลบังคับใช้

อักขระไบต์ ลักษณะ กว้างคำอธิบาย
isalnumiswalnumตรวจสอบว่าตัวถูกดำเนินการเป็นตัวอักษรและตัวเลขหรือไม่
isalphaiswalphaตรวจสอบว่าตัวถูกดำเนินการเป็นตัวอักษรหรือไม่
isloweriswlowerตรวจสอบว่าตัวถูกดำเนินการเป็นตัวพิมพ์เล็กหรือไม่
isupperiswupperตรวจสอบว่าตัวถูกดำเนินการเป็นตัวพิมพ์ใหญ่หรือไม่
isdigitiswdigitตรวจสอบว่าตัวถูกดำเนินการเป็นตัวเลขหรือไม่
isxdigitiswxdigitตรวจสอบว่าตัวถูกดำเนินการเป็นเลขฐานสิบหกหรือไม่
iscntrliswcntrlตรวจสอบว่าตัวถูกดำเนินการเป็นอักขระควบคุมหรือไม่
isgraphiswgraphตรวจสอบว่าตัวถูกดำเนินการเป็นอักขระกราฟิกหรือไม่
isspaceiswspaceตรวจสอบว่าตัวถูกดำเนินการเป็นช่องว่าง หรือไม่
isblankiswblankตรวจสอบว่าตัวถูกดำเนินการเป็นอักขระช่องว่างหรือไม่
isprintiswprintตรวจสอบว่าตัวถูกดำเนินการเป็นอักขระที่พิมพ์ได้หรือไม่
ispunctiswpunctตรวจสอบว่าตัวถูกดำเนินการเป็นเครื่องหมายวรรคตอนหรือไม่
tolowertowlowerแปลงตัวถูกดำเนินการเป็นตัวพิมพ์เล็ก
touppertowupperแปลงตัวถูกดำเนินการเป็นตัวพิมพ์ใหญ่
ไม่มีข้อมูลiswctypeตรวจสอบว่าตัวถูกดำเนินการนั้นอยู่ในคลาสที่กำหนดหรือไม่
ไม่มีข้อมูลtowctransแปลงตัวถูกดำเนินการโดยใช้การแมปเฉพาะ
ไม่มีข้อมูลwctypeส่งคืนคลาสอักขระกว้างเพื่อนำไปใช้กับiswctype
ไม่มีข้อมูลwctransส่งคืนแผนที่การแปลงที่จะนำไปใช้กับtowctrans

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=C_character_classification&oldid=1328454953 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การจำแนกประเภทตัวอักษร C

การจำแนกประเภทอักขระ Cเป็นกลุ่มของการดำเนินการในไลบรารีมาตรฐาน Cที่ทดสอบอักขระว่าเป็นสมาชิกของกลุ่มอักขระใดโดยเฉพาะ เช่น อักขระตัวอักษรหรืออักขระควบคุม...

ประวัติศาสตร์

โปรแกรมเมอร์ ภาษาซี ในยุคแรกๆที่ทำงานกับระบบปฏิบัติการ Unix ได้พัฒนา รูปแบบการเขียนโปรแกรม เพื่อจำแนกประเภทของอักขระ ตัวอย่างเช่น โค้ด ต่อไปนี้ จะประเมินค่าเป็น จริง สำหรับอักขระตัวอักษร ASCII : c

การดำเนินการ

เพื่อประสิทธิภาพที่ดีขึ้น ฟังก์ชันการจำแนกประเภทอักขระมาตรฐานมักถูกนำไปใช้ในรูปแบบมาโครแทนที่จะเป็น ฟังก์ชัน แต่เนื่องจากข้อจำกัดของการประเมินมาโคร ปัจจุบันจึงโดยทั่วไปแล้วไม่ได้ถูกนำมาใช้ในรูปแบบเดียวกับใน Linux เวอร์ชันแรกๆ เช่น:

ภาพรวมของฟังก์ชันต่างๆ

ฟังก์ชันที่ใช้กับอักขระแบบไบต์เดียวถูกกำหนดไว้ในไฟล์เฮดเดอร์ ctype.h ( cctype ใน C++) ส่วนฟังก์ชันที่ใช้กับอักขระแบบไบต์กว้างถูกกำหนดไว้ในไฟล์เฮดเดอร์ wctype.h ( cwctype ใน C++)