Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ iswprint() 함수 – 와이드 문자 출력 가능 여부 확인 방법

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()는 와이드 문자열에서 제어 문자나 출력할 수 없는 값을 손쉽게 걸러낼 수 있는 함수입니다. 사용자 입력값 정제, 로그 데이터 클렌징, 안전한 문자열 출력 처리 등 다양한 상황에서 활용할 수 있으니, 와이드 문자를 다룰 때 꼭 기억해 두시기 바랍니다.