개발 및 연구 정보

VC++ 문자열 분리 알고리즘

바보천사 2007. 10. 29. 13:46

 /*
 * 문자열 토크나이징 함수
 * 입력
 *  ch: 토큰 문자
 *  strIn: 입력 문자열
 *  strOut: 토큰 들이 담길 문자열 배열
 *  nSize: strOut의 크기
 * 반환값 - 토큰 개수
 *   -1: 문자열의 마지막이 토큰인 경우, 즉, 토큰 뒤에 분리할 문자가 없는 경우
 *    (함수내 처리 가능; 제일 마지막 구분 문자를 제외하고 토크나이징 하면 됨)
 *   -2: 토큰으로 분리된 문자열 배열이 nSize보다 큰 경우
 */

int GenericFunc::SplitCString(char ch, const CString strIn, CString *strOut, int nSize)
{
    int nStart, nStrLen, nTarget, nCount;
    CString str = strIn;

 str.TrimLeft();
 str.TrimRight();

    nStart = nCount = 0;
    nStrLen = str.GetLength();

 // 맨 처음에 구분 문자가 있는 경우
 while( str.GetAt( 0 ) == ch )
 {
  str = str.Mid(1);
  nStrLen = str.GetLength();
 }

    // 맨 마지막에 구분 문자가 있는 경우
 while( str.GetAt( nStrLen-1 ) == ch )
 {
  str = str.Left(nStrLen-1);
  nStrLen = str.GetLength();
 }


    for(;;)
    {
        nTarget = str.Find(ch, nStart);
       
        // 구분 문자가 없는 경우
        if(nTarget == -1)    break;

        // 데이터가 배열의 크기를 초과하는 경우
        if(nCount>=nSize) return -2;

        strOut[nCount] = str.Mid(nStart, nTarget-nStart);
        nCount++;
        nStart = nTarget+1;
    }

    if(nCount == 0)        return 0;

    if(nStart != nStrLen) {

        // 데이터가 배열의 크기를 초과하는 경우
        if(nCount>=nSize) return -2;

        strOut[nCount] = str.Mid(nStart, nStrLen-nStart);
        nCount++;
    }

    return nCount;
}

'개발 및 연구 정보' 카테고리의 다른 글

[펌]Webometrics - 웹 관계  (0) 2008.05.15
기초적인 수학 기호  (0) 2008.01.25
[VC++]구조체를 qsort 하기  (0) 2007.11.06
컴퓨터 관련 약어집  (0) 2007.11.06
[VC++]대용량 변수 선언시 스택 에러 해제  (0) 2007.10.23