티스토리 뷰
afxwin.h에 정의되어 있습니다.
BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,
int iSubString, TCHAR chSep = '\n');
"abc,123,defdff,hello,456" 이런 스트링이 있을때,
구분자로 구분된 몇번째 스트링을 골라내는데 유용합니다.
함수 하나,한줄만 쓰면 모든것이 이루어집니다.
"파일명.확장자"로 구성된 스트링에서 파일명과 확장자를 처리할때도 유용하게사용됩니다.
아래는 예제입니다.
CString sTemp;
CString Str;
Str="abc,123,def,432,lim,34,23,hello";
AfxExtractSubString(sTemp,(LPCTSTR)Str, 0, ','); //Str="abc"
AfxExtractSubString(sTemp,(LPCTSTR)Str, 4, ','); //Str="lim"
Str="Sample.rtf";
AfxExtractSubString(sTemp,(LPCTSTR)Str, 0, '.'); //Str="Sample"
AfxExtractSubString(sTemp,(LPCTSTR)Str, 1, '.'); //Str="rtf"
=====
01.int iSub = 0;
02.CString strTok, strFull;
03.strFull = _T("aa;bb;cc;dd");
04.
05.while(AfxExtractSubString(strTok, strFull, iSub++, ';'))
06.{
07. MessageBox(strTok);
=====
프로그램을 짜다가 split 라는 것을 사용할 일이 있었다.
Java 에서는
String[] dst = src.split(",");
이런 식으로 만들어져 있다
mfc 는 없다 젠장;;
구글링을 졸라 하는 순간 동일한 기능을 찾았지만...
문제점은 한글자 밖에 인식을 안한다는거;;;;
그래서 내가 만들기로;;;
int splitString(CString str, CString var, CStringArray &strs)
{
int count = 0;
CString tempStr = str;
int length = str.GetLength();
while(length)
{
int find = tempStr.Find(var);
if(find != -1)
{
CString temp = tempStr.Left(find);
//삭제 내역
//strs.Add(temp);
//temp += var;
//tempStr.Replace(temp, _T(""));
// 수정 내역
int varLen = _tcslen(var);
tempStr = tempStr.Mid(find + varLen);
count++;
}
else
{
strs.Add(tempStr);
length = 0;
}
}
return count;
}
------------------------------------
실행 소스
CString temp = _T("park,,se,,chul");
CStringArray str;
int count = splitString(temp, _T(",,"), str);
if(count)
{
for(int i = 0 ; i < count ; i++)
{
::AfxMessageBox(str.GetAt(i));
}
}
소스가 난잡하게 되어 있지만, 일단 동작하는 것에;;;;
소스 정리는 나중에 하는 걸로;;
※ 참고로 개발 환경은 Visual Studio 2008 버전에서 만든거임