[WinAPI] CString 문자열 추출 SpanIncluding, SpanExcluding

이번 글에서는 CString의 SpanIncludingSpanExcluding을 사용하여 포함 문자열, 포함하지 않는 문자열을 추출하는 방법에 대해 알아보겠습니다.

CString을 사용하기 위해서는 아래 함수를 include 해야합니다.

헤더 
cstringt.hMFC 전용 문자열 개체
atlstr.h비 MFC 문자열 개체

SpanIncluding은 포함, SpanExcluding은 미포함하는 문자열을 추출합니다.
예를 들어 “0123456789”에서 SpanIncluding 함수를 사용하여 0 ~ 4까지 문자열만 추출할 수 있습니다.
위 두 함수는 문자열에 특정 문자가 들어있는지, 들어 있지 않은지 확인할 때 편하게 사용할 수 있습니다.

예시 코드를 보겠습니다.

CString strUserInput = _T("0123456789");

CString strInclude = strUserInput.SpanIncluding( _T( "012" ) );
CString strExclude = strUserInput.SpanExcluding(_T("678"));

TRACE( _T( "%s\n" ), strInclude ); // 012
TRACE( _T( "%s\n" ), strExclude ); // 012345

SpanIncluding( _T(“012”) )을 실행하면 “012”까지 포함되어 문자열을 반환합니다. 그래서 strInclude에는 “012”가 담겨져 있습니다.
SpanExcluding( _T(“678”) )을 실행하면 “678”이 포함되지 않는 “012345”까지 반환합니다. 그래서 strExclude에는 “012345”가 담겨져 있습니다.

사용자에게 숫자만 입력 받고 싶으면 아래와 같이 활용할 수 있습니다.

CString strUserInput = _T( "abc_123" );
CString strOnlyNumber = strUserInput.SpanIncluding( _T( "0123456789" ) );
if ( strOnlyNumber.Compare(strUserInput) != 0 )
{
	TRACE( _T( "숫자 이외에 다른 문자가 있습니다.\n") );
}

사용자에게 소문자 알파벳은 입력 받고 싶지 않다면 아래와 같이 코딩하여 사용가능합니다.

CString strUserInput = _T( "ABCdeFG" );
CString strExceptLower = strUserInput.SpanExcluding( _T( "abcdefghijklmnopqrstuvwxyz" ) );
if ( strExceptLower.Compare( strUserInput ) != 0 )
{
	TRACE( _T( "알파벳 소문자가 입력되어 있습니다.\n" ) );
}