오늘은 문자 또는 문자열을 split 하는 방법에 대해 설명합니다.


보통 자바스크립트나 자바 등에서는 쉽게 제공이 되지만 C++에서는 직접 구현을 해줘야 합니다.


여러군데에서 설명나온걸 마니 보았지만 실제 업무에서 적용되어서 운영되는 것인지 명확하지 않기 때문에 제가 현재 사용하고 있는 함수를 공개합니다.


* 문자단위의 split


int Util::Split(LPCTSTR lpszExpression, TCHAR chDelimiter, CStringArray &result)

{

int nCount = 0;

CString strSub;


while (AfxExtractSubString(strSub, lpszExpression, nCount++, chDelimiter)){

strSub.TrimLeft();

strSub.TrimRight();

result.Add(strSub);

}

return nCount;

}



위 함수는 하나의 문자에 대해 분할할 때 사용합니다. 걀과는 CStringArray 로 전달됩니다.
그리고 return 은 분할 된 개수입니다.

* 사용법
CStringArray protocol_array;
m_util.Split(card_confirm_protocol, '*', protocol_array);
    AfxMessageBox(protocol_array[0]);

아주 쉽죠..

* 문자열의 split

int Util::Splits(CString string, CString sep, CStringArray& array)
{

int nCount = 0;
while (string.GetLength() > 0){
int Pos = string.Find(sep);
if (Pos != -1){
array.Add(string.Left(Pos));
string = string.Mid(Pos + sep.GetLength());
nCount++;
if(string.IsEmpty()){
array.Add("");
nCount++;
}else{
array.Add(string);
string = "";
nCount++;
}
}
return nCount;

}

위 함수는 문자열을 분할할 때 사용합니다.
기존 인터넷에 설명이 나온것 중에 특정문자열에 대해 분할이 정상적으로 이루어 지지 않는 것들이 좀 있는데 
위 함수는 그것까지 정상처리되도록 작업이 된 함수입니다.


* 사용법

          CStringArray str_array; 

m_util.Splits(is_parm, "||||", str_array);
                AfxMessageBox(str_array[0]);


위 두 함수를 쌍으로 설정해 놓고 사용하시면 유연하게 사용하실 수 있습니다.

그럼~~






+ Recent posts