บทความนี้สาธิตการทำงานของฟังก์ชัน iswprint() ใน C++ STL ฟังก์ชันนี้ใช้ตรวจสอบว่าตัวอักขระกว้าง (wide character) สามารถพิมพ์/แสดงผลได้หรือไม่ ฟังก์ชันอยู่ในเฮดเดอร์ <cwctype>
ตัวอักขระกว้าง (Wide character) เป็นชนิดข้อมูลตัวอักขระที่มีขนาดใหญ่กว่าตัวอักขระ 8-bit แบบดั้งเดิม (เช่น wchar_t มักเป็น 16 หรือ 32 bit) ใช้สำหรับรองรับ Unicode และชุดอักขระขนาดใหญ่
ไวยากรณ์ (Syntax)
int iswprint(wint_t c);
พารามิเตอร์
c – ตัวอักขระกว้างที่ต้องการตรวจสอบว่าเป็น printable หรือไม่
ค่าที่ส่งคืน
- ค่าที่ไม่ใช่ศูนย์ (non-zero) – หาก
cเป็นตัวอักขระที่พิมพ์ได้ - ศูนย์ (0) – หาก
cไม่ใช่ตัวอักขระที่พิมพ์ได้ (control characters เป็นต้น)
ตัวอักขระที่พิมพ์ได้ (Printable Characters)
- ตัวอักษรใหญ่ – A ถึง Z
- ตัวอักษรเล็ก – a ถึง z
- ตัวเลข – 0 ถึง 9
- เครื่องหมายวรรคตอน – ! " @ # $ % ^ & * ( ) } | \ ] [ _ - + ' ? / . , } : ; ~ `
- ช่องว่าง (Space)
ตัวอย่างโค้ดที่ 1: แทนที่อักขระที่พิมพ์ไม่ได้
#include <cwchar>
#include <iostream>
#include <cwctype>
using namespace std;
int main() {
wchar_t str[] = L"authorized
ผลลัพธ์
authorized คำอธิบาย: ตัวอักขระ<ไม่ได้อยู่ในรายการ printable characters ตาม locale เริ่มต้น จึงถูกแทนที่ด้วย@ตัวอย่างโค้ดที่ 2
#include <cwchar> #include <iostream> #include <cwctype> using namespace std; int main() { wchar_t str[] = L"and I am<= Iron Man"; wcout << str << endl; for (int i = 0; i < wcslen(str); i++) { if (!iswprint(str[i])) str[i] = L'&'; } wcout << str << endl; return 0; }ผลลัพธ์
and I am<= Iron Man and I am &&Iron Manข้อสังเกตเพิ่มเติม
- พฤติกรรมของ
iswprint()ขึ้นอยู่กับ locale ปัจจุบัน (ตั้งค่าด้วยsetlocale())- ใน locale "C" เริ่มต้น มีเพียงอักขระ ASCII พิมพ์ได้เท่านั้นที่ถือว่า printable
- สำหรับ Unicode จริงๆ ควรใช้ไลบรารี ICU หรือฟังก์ชันใน C++20 เช่น
std::isprintกับchar8_t/char32_t- ฟังก์ชันที่เกี่ยวข้อง:
iswspace(),iswalnum(),iswalpha(),iswdigit(),iswpunct()