Chúng ta được giao nhiệm vụ trình bày hoạt động của iswprint(). Hàm iswprint() trong C++ STL dùng để kiểm tra xem một wide character (ký tự rộng) có thể in được hay không. Hàm này nằm trong header <cwctype>. Wide character là kiểu dữ liệu ký tự có kích thước lớn hơn ký tự truyền thống 8-bit.
Cú pháp
int iswprint(wint_t c);
Tham số
c – Wide character cần kiểm tra xem có in được hay không.
Giá trị trả về
- Trả về giá trị khác 0 (true) nếu
ccó thể in được. - Trả về 0 (false) nếu
ckhông thể in được.
Các ký tự có thể in (printable characters)
- Chữ hoa – A-Z
- Chữ thường – a-z
- Chữ số – 0-9
- Ký tự dấu câu – ! " @ # $ % ^ & * ( ) } | \ ] [ _ - + ' ? / . , } : ; ~ `
- Khoảng trắng – space
Ví dụ 1: Thay thế ký tự không in được
#include <cwchar>
#include <iostream>
#include <cwctype>
using namespace std;
int main() {
wchar_t str[] = L"authorized<channel<partners";
wcout << str << endl;
for (int i = 0; i < wcslen(str); i++) {
if (!iswprint(str[i]))
str[i] = L'@';
}
wcout << str << endl;
return 0;
}
Kết quả
authorized<channel<partners authorised@channel@partners
Giải thích: Ký tự '<' không phải ký tự in được tiêu chuẩn trong một số locale, nên bị thay bằng '@'.
Ví dụ 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;
}
Kết quả
and I am<= Iron Man and I am && Iron Man
Lưu ý: Kết quả có thể khác nhau tùy vào locale và encoding của hệ thống. Hàm iswprint() kiểm tra theo locale hiện tại (setlocale).