본문 바로가기
개발 이야기/개발자 이야기

[MFC] CString을 특정문자로 나누기

by 런던살자 2018. 11. 8.

안녕하세요 마블랑입니다.

 

이번 포스팅은 MFC 프로그래밍을 할때 문자열로 많이 사용하는 CString에 관한 내용입니다.

 

MFC프로그램을 개발하다 보면 CString 문자열의 특정 문자열만 사용해야하는 경우가 많죠?

 

문자열을 나누는 방법은 char 배열로 복사하여 캐스팅 변환 후 사용하는 방법 등 여러가지 방법이 있는데요.

 

그 중 하나인 AfxExtractSubString 함수에 대해서 설명하겠습니다.

 

 

먼저 AfxExtractSubString 의 원형에 대해서 살펴볼까요? (출처 : MSDN, https://msdn.microsoft.com/ko-kr/library/aa991543.aspx)

 

BOOL AFXAPI AfxExtractSubString (

   CString& rString,

   LPCTSTR lpszFullString,

   int iSubString,

   TCHAR chSep = '\n'

);

 

바로 매개변수에 대해서 설명하겠습니다.

 

   CString& rString                 -> 나누어진 문자열을 저장할 변수

   LPCTSTR lpszFullString         -> 특정문자로 나눌 문자열

   int iSubString                     -> 나누어진 문자열의 인덱스

   TCHAR chSep                    -> 문자열을 나눌 특정문자

 

설명을 드리자면 두번째 인자네번째 인자 기준으로 쪼갠뒤에 세번째 인자에 해당하는 인덱스의 문자열을 첫번째 인자에 저장하는 함수입니다.

 

 

 

이해를 위해 예제를 살펴보도록 하죠.

 

1. CString str = "Hello#Mablang#World#Thank You#See you"; 

2. CString strHello, strMablang, strWorld, strThank_You, strSee_You; 

3. AfxExtractSubString(strHello, str, 0, '#'); 

4. AfxExtractSubString(strMablang, str, 1, '#');

5. AfxExtractSubString(strWorld, str, 2, '#');

6. AfxExtractSubString(strThank_You, str, 3, '#'); 

7. AfxExtractSubString(strSee_You, str, 4, '#'); 

8. CString strOutput;

9. strOutput.Format(" %s / %s / %s / %s / %s ", strHello, strMablang, strWorld, strThank_You, strSee_You);

10. AfxMessageBox(strOutput);

 

1: 특정문자열을 나누기 위한 문자열입니다. 나누려고하는 문자열이라고 보시면 됩니다.

2: 나누어진 문자열을 저장할 문자열입니다. 예제에서는 5개로 나눠서 모두 저장을 하려고 해서 5개 변수로 선언하였습니다.

3~7: AfxExtractSubString 함수를 이용하여 문자열을 나눕니다.

8~10: 나누어진 문자열이 잘 나누어졌나 확인하기 위해 메시지박스로 출력합니다.

 

 

예제를 빌드한뒤 실행하면 다음과 같이 출력되는 것을 확인할 수 있습니다.

 

출력 : Hello / Mablang / World / Thank You / See you

 

 

정리를 하면 AfxExtractSubString 를 호출하면 메모리에 다음과 같이 임시로 저장된다고 보시면 됩니다. 

 

{"Hello","Mablang","World","Thank You","See you"}

 

여기서 세번째 인자로 입력된 인덱스에 해당하는 문자열을 가져오는 것이죠.

 

 

 

이상 CString을 특정문자로 나누기 포스팅을 마치겠습니다.

 

예제를 통해 설명드리는 것은 처음이라 이해가 잘되셨는지 모르겠습니다.

 

쉬운 내용이지만 모르시는 분들에게는 도움이 되길 바라며 AfxExtractSubString 를 통해 좀 더 효율적이 결과물이 나오길 바랍니다.

 

궁금하신 사항은 항상 댓글로 남겨주시면 답변을 하겠습니다.

 

그럼 다음 포스팅에서 만나뵙겠습니다~ 읽어주셔서 감사합니다.

 

 

 

 

댓글