프로그램/C++

문자 및 문자열의 split 구현

네오류이 2021. 1. 25. 14:19
728x90
반응형

오늘은 문자 또는 문자열을 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]);

 

 

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

 

그럼~~

 

#c++#CStringArray#split#구현#함수

728x90
반응형