一Tokenize
Finds the next token in a target string CStringT Tokenize( PCXSTR pszTokens, int& iStart ) const; Parameters pszTokens A string containing token delimiters. The order of these delimiters is not important. iStart The zero-based index to begin the search. Return Value A CStringT object containing the current token value.
//typedef CStringT< TCHAR, StrTraitATL< TCHAR > > CAtlString; CAtlString str( "%First Second#Third" ); CAtlString resToken; int curPos= 0; resToken= str.Tokenize("% #",curPos); while (resToken != "") { printf("Resulting token: %s\n", resToken); resToken= str.Tokenize("% #",curPos); }; Output Resulting Token: First Resulting Token: Second Resulting Token: Third
CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD"); CStringArray szArray; int curPos= 0; while(1) { CString resToken= str.Tokenize(_T("|"), curPos); if(resToken.IsEmpty()) break; szArray.Add(resToken); }
二 _tcstok
CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD"); CStringArray arr; LPTSTR p =_tcstok( strTest.GetBuffer() , TEXT("|") ); while( p != 0 ) { arr.Add( p); p = _tcstok( 0 , TEXT("|") ); } strTest.ReleaseBuffer();
三自己的例子
CString classStr=g_ParseKeyStr;//L"眼睛,眉毛,鼻子,3";//类别信息 std::vector<CString> keyVec; int curPos=0; CString keyStr; keyStr=classStr.Tokenize(L",,、",curPos); while(!keyStr.IsEmpty ()) { keyVec.push_back(keyStr); keyStr=classStr.Tokenize(L",,",curPos); }
CString lastStr; int nNeedNum=keyVec.size (); //需同时满足的关键字个数 int nKeyNum=keyVec.size ();//关键字的个数 lastStr=keyVec.at(keyVec.size ()-1); if(lastStr.SpanIncluding (L"1234567890")==lastStr) { //最后一个数为数字 nNeedNum=_wtoi(lastStr); nKeyNum--; } if (nNeedNum>nKeyNum) { nNeedNum=nKeyNum; }
原文:http://blog.csdn.net/shuilan0066/article/details/44565015