이 글에서는 C++ STL에서 제공하는 iswgraph() 함수의 동작 원리, 문법, 그리고 실제 예제까지 자세히 살펴보겠습니다.
iswgraph()는 <cwctype> 헤더 파일에 정의된 함수로, 주어진 와이드 문자(wide character)가 화면에 출력할 수 있는 그래픽 표현을 갖고 있는지 검사합니다. 이 함수는 <cctype> 헤더 파일의 isgraph() 함수를 와이드 문자 버전으로 확장한 것입니다.
그래픽 표현을 가지는 와이드 문자란?
화면에 출력할 수 있는 모든 와이드 문자가 그래픽 표현을 가집니다. 반면, 줄바꿈이나 탭 같은 이스케이프 문자와 공백 문자는 화면에 표시되는 모양이 없으므로 그래픽 표현에 해당하지 않습니다.
문법
int iswgraph(ch);
매개변수
이 함수는 와이드 문자 타입(wchar_t)의 ch, 단 한 개의 매개변수만 받습니다.
반환 값
검사 결과를 정수 값으로 반환합니다.
- 와이드 문자가 그래픽 표현을 가지지 않으면 0을 반환합니다.
- 와이드 문자가 그래픽 표현을 가지면 0이 아닌 값(nonzero)을 반환합니다.
예제
입력: iswgraph('?');
출력: 그래픽 표현이 있습니다.
입력: iswgraph(' ');
출력: 그래픽 표현이 없습니다.예제 1: 특수 문자 검사하기
#include <cwctype>
#include <iostream>
using namespace std;
int main() {
wchar_t ch_1 = '%';
wchar_t ch_2 = ')';
if(iswgraph(ch_1))
wcout<< "It has graphical representation: "<<ch_1;
else
wcout<< "It doesn't have graphical representation: "<<ch_1;
if (iswgraph(ch_2))
wcout<< "\nIt has graphical representation: "<<ch_2;
else
wcout<< "\nIt doesn't have graphical representation: "<<ch_2;
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
It has graphical representation: %
It has graphical representation: )
'%'와 ')'는 모두 화면에 출력 가능한 문자이므로, 두 경우 모두 그래픽 표현이 있는 것으로 판단됩니다.
예제 2: 숫자와 제어 문자 비교하기
#include <cwctype>
#include <iostream>
using namespace std;
int main() {
wchar_t ch_1 = '9';
wchar_t ch_2 = '\n';
if(iswgraph(ch_1))
wcout<< "It has graphical representation: "<<ch_1;
else
wcout<< "It doesn't have graphical representation: "<<ch_1;
if (iswgraph(ch_2))
wcout<< "\nIt has graphical representation: "<<ch_2;
else
wcout<< "\nIt doesn't have graphical representation: "<<ch_2;
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
It has graphical representation: 9
It doesn't have graphical representation:
숫자 '9'는 화면에 출력 가능한 문자이므로 그래픽 표현이 있다고 판단되지만, 줄바꿈 문자 '\n'은 눈에 보이는 모양이 없는 제어 문자이므로 그래픽 표현이 없다고 판단됩니다.
마무리
iswgraph()는 와이드 문자가 출력 가능한 그래픽 문자인지 빠르게 판별할 때 유용한 함수입니다. 함께 알아두면 좋은 관련 함수로는 와이드 문자의 출력 가능 여부를 검사하는 iswprint(), 제어 문자 여부를 검사하는 iswcntrl(), 공백 문자 여부를 검사하는 iswspace() 등이 있습니다. 문자열 입력 검증이나 포맷팅 로직을 구현할 때 이러한 함수들을 적절히 활용하면 더 안전하고 깔끔한 코드를 작성할 수 있습니다.