2012-09-25 9 views
2

구분 기호를 사용하여 문자열을 토큰 화하기 위해 CString::Tokenize 메서드를 사용하고 있지만 이상한 것으로 나타났습니다. 문자열 내 모든 토큰을 검색하기 때문에 루프 내에서 해당 메서드를 호출합니다. 여기 내 코드는 다음과 같습니다CString 토큰 화 문제

CString strToken; 
for(int nTokenPos = 0; nTokenPos < dialog->myValue.GetLength(); nTokenPos++) 
{ 
    //TRACE("The Size of the string is %d\n", dialog->myValue.GetLength()); 
    TRACE("Iteration No %d\n",nTokenPos); 
    strToken = dialog->myValue.Tokenize(_T("X"), nTokenPos); 
    strToken+="\n"; 
    OutputDebugString(strToken); 
} 

참고 : dialog->myValue 내가 토큰 화 할 문자열입니다. 나는 '99X1596'에 해당 코드를 테스트 할 때 (예를 들어)의 출력은 다음과 같습니다

Iteration No 0 
99 
Iteration No 4 
596 

또 다른 예는 '4568X6547' 출력 : 그것은 처음 무시 이유를 모르겠어요

Iteration No 0 
4568 
Iteration No 6 
547 

문자는 구분 기호 'X'다음에 하나의 반복을 건너 뜁니다!

답변

2

for 루프에서 nTokenPos을 늘립니다. 그래서 두 번째 토큰이 깨졌습니다. CString::Tokenize 업데이트 nTokenPos 다음 iterations에서 사용합니다.

올바른 사용법은 다음과 같이입니다 : 내가 문자열의 모든 토큰을 검색하려는 때문에

CString str = "99X1596"; 
int curPos = 0; 
CString resToken = str.Tokenize(_T("X"), curPos); 
while(!resToken.IsEmpty()) 
{ 
    // Process resToken here - print, store etc 
    OutputDebugString(resToken); 

    // Obtain next token 
    resToken = str.Tokenize(_T("X"), curPos); 
} 
+0

난 당신이 필요하지 않은 –

+1

,'Tokenize'는 당신을 위해 그것을 증가 할 것이다 그것을 증가. 예를 들어 업데이트 된 답변보기 – Rost

+0

하지만 단락 기호 뒤에 토큰 만 출력됩니다 !!! –