C++ STL에서 제공하는 iswprint() 함수는 주어진 와이드 문자(wide character)가 화면에 출력할 수 있는 문자인지 검사하는 데 사용됩니다. 이 함수는 <cwctype> 헤더 파일에 선언되어 있으며, 일반적인 8비트 문자보다 큰 크기를 갖는 와이드 문자를 다룰 때 특히 유용합니다.
문법(Syntax)
int iswprint(c);
매개변수(Parameter)
c – 출력 가능 여부를 검사할 와이드 문자를 지정하는 매개변수입니다.
반환값(Return Value)
- c가 출력 가능한 문자라면 0이 아닌 값(non-zero)을 반환합니다.
- c가 출력 불가능한 문자라면 0을 반환합니다.
출력 가능한 문자의 종류
iswprint() 함수가 '출력 가능'으로 판단하는 문자는 다음과 같습니다.
- 대문자 – A ~ Z
- 소문자 – a ~ z
- 숫자 – 0 ~ 9
- 구두점 및 특수 기호 – ! " @ # $ % ^ & * ( ) { } [ ] | \ _ - + ' ? / . , : ; ~ `
- 공백(Space)
반면 탭(\t), 개행(\n)처럼 눈에 보이는 형태가 없는 제어 문자는 출력 불가능한 문자로 분류됩니다.
예제 1: 출력 불가능한 문자를 '@'로 대체하기
아래 예제에서는 문자열에 포함된 탭 문자(\t)가 iswprint()에 의해 출력 불가능으로 판별되어 '@'로 교체됩니다.
#include <cwchar>
#include <iostream>
#include <cwctype>
using namespace std;
int main() {
wchar_t str[] = L"authorized\tchannel\tpartners";
wcout << str << endl;
// 출력 불가능한 문자를 '@'로 대체
for (int i = 0; i < wcslen(str); i++) {
if (!iswprint(str[i]))
str[i] = L'@';
}
wcout << str << endl;
return 0;
}
실행 결과
authorized channel partners authorized@channel@partners
첫 번째 출력에서는 탭 문자가 그대로 적용되어 들여쓰기처럼 보이지만, 두 번째 출력에서는 해당 위치가 '@'로 바뀐 것을 확인할 수 있습니다.
예제 2: 출력 불가능한 문자를 '&'로 대체하기
#include <cwchar>
#include <iostream>
#include <cwctype>
using namespace std;
int main() {
wchar_t str[] = L"and I am\t 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()는 와이드 문자열에서 제어 문자나 출력할 수 없는 값을 손쉽게 걸러낼 수 있는 함수입니다. 사용자 입력값 정제, 로그 데이터 클렌징, 안전한 문자열 출력 처리 등 다양한 상황에서 활용할 수 있으니, 와이드 문자를 다룰 때 꼭 기억해 두시기 바랍니다.