이번 글에서는 C++의 iswpunct() 함수를 자세히 살펴보겠습니다. 함수의 기본 개념부터 문법, 동작 방식, 그리고 반환값까지 예제 코드와 함께 알아봅니다.
iswpunct()는 C++의 <cwctype> 헤더 파일에 정의된 내장(built-in) 함수로, 전달된 와이드 문자(wide character)가 구두점(punctuation) 문자인지 여부를 검사합니다. 이 함수는 ispunct()의 와이드 문자 버전으로, 동작 방식은 ispunct()와 동일하지만 와이드 문자를 지원한다는 점이 차이입니다.
즉, 인자로 전달된 문자가 구두점 문자이면 0이 아닌 정수값(true)을 반환하고, 구두점이 아니면 0(false)을 반환합니다.
구두점 문자의 종류
다음과 같은 특수 기호들이 구두점 문자로 분류됩니다.
! @ # $ % ^ & * ( ) “ ‘ , . / ; [ { } ] : ?문법(Syntax)
int iswpunct(wint_t ch);
이 함수는 매개변수를 하나만 받습니다. 바로 검사 대상인 와이드 문자입니다. 인자는 내부적으로 wint_t 타입 또는 WEOF로 변환(casting)됩니다.
wint_t는 정수 계열(integral type)의 데이터를 저장할 수 있는 자료형입니다.
반환값(Return Value)
- 전달된 문자가 구두점 문자인 경우 → 0이 아닌 값 (참)
- 구두점 문자가 아닌 경우 → 0 (거짓)
예제 1: 단일 문자 검사
#include <iostream>
#include <cwctype>
using namespace std;
int main() {
wint_t a = '.';
wint_t b = 'a';
wint_t c = '1';
iswpunct(a)?cout<<"\nIts Punctuation character":cout<<"\nNot Punctuation character";
iswpunct(b)?cout<<"\nIts Punctuation character":cout<<"\nNot Punctuation character";
iswpunct(c)?cout<<"\nIts Punctuation character":cout<<"\nNot Punctuation character";
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Its Punctuation character Not Punctuation character Not Punctuation character
'.'는 구두점이므로 참을 반환하고, 문자 'a'와 숫자 '1'은 구두점이 아니므로 거짓을 반환한 것을 확인할 수 있습니다.
예제 2: 문자열에서 구두점 개수 세기
#include <iostream>
#include <cwctype>
using namespace std;
int main () {
int i, count;
wchar_t s[] = L"@tutorials, point!!";
count = i = 0;
while (s[i]) {
if(iswpunct(s[i]))
count++;
i++;
}
cout<<"There are "<<count <<" punctuation characters.\n";
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
There are 4 punctuation characters.
문자열 L"@tutorials, point!!"에는 '@', ',', '!', '!' 총 4개의 구두점 문자가 포함되어 있으므로 개수가 4로 출력됩니다.
마무리
iswpunct() 함수는 와이드 문자열을 처리할 때 특정 문자가 구두점인지 판별해야 하는 경우에 유용하게 사용됩니다. 토큰화(tokenization), 입력 유효성 검사, 텍스트 파싱 등 다양한 상황에서 활용할 수 있습니다. 참고로 유사한 와이드 문자 분류 함수로는 영문자를 검사하는 iswalpha(), 숫자를 검사하는 iswdigit(), 공백을 검사하는 iswspace() 등이 있으며, 이들 역시 모두 <cwctype> 헤더 파일에 정의되어 있습니다.