1. 程式人生 > >關於字串分割C++,AfxExtractSubString,_tcstok

關於字串分割C++,AfxExtractSubString,_tcstok

第一種: AfxExtractSubString,該函式在MSDN文件中沒有說明,但在分割字串時很有用,當然也可用Find自己去寫。 函式原型: BOOL AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n') 引數說明: rString  儲存輸出的子字串 lpszFullString  待分割的字串 iSubString  提取的子字串的序號,從0開始。假如你想提取第3段,該引數就輸入2 chSep  用於分割的字元,預設的是'\n'  返回值:分割成功,就返回TRUE;iSubString越界,則返回FALSE 舉例說明: CString str = _T("abc45,78ea,679u,368"); CString strSub; AfxExtractSubString(strSub, (LPCTSTR)str, 0, ',');  // strSub的內容為abc45 AfxExtractSubString(strSub, (LPCTSTR)str, 3, ',');  // strSub的內容為368 注意:用於分割的只能是字元,不能是字串。 第二種 一._tcstok函式    在MFC中,一個CString str="ab ac dd PM",怎麼把他分開成ab和ac和dd和PM這四個字串,類似string的split的功能?     _tcstok宣告標頭檔案:    char* _tcstok( char* strToken, const char* strDelimit );    該函式是可以從一個CString串中,根據提供的分隔符,擷取並返回一個一個的Token;    引數:    strToken: 是一個要分析的串;這個串中包含一個或者多個Token,當然還有分隔符,也有可    能有其他的字元;    strDelimit: 是分隔符;根據分隔符把strToken中的Token分析出來;    //==============test1:_tcstok===============    //將以空格符為分隔符對str進行分割    CString str = _T("192.168.89.125");     TCHAR seps[] = _T(".");     TCHAR* token = _tcstok( (LPTSTR)(LPCTSTR)str, seps );     while( token != NULL )     {    printf("str=%s  token=%s\n",str,token);            token = _tcstok( NULL, seps );     }    //==============test1:end==================    執行結果如下:    str=192  token=192    str=192  token=168    str=192  token=89    str=192  token=125    第一次呼叫的時候,函式會忽略出現在strToken串開始的分隔符,返回找到的Token指標,用空字元(NULL character )替換掉已經查詢到的部分(包括分隔符)並把"新"串儲存到一個Static變數中(系統來完成);    如果下次呼叫時第一個引數為NULL的話,函式從Static變數中取出串,根據分隔符得到並返回新Token,用空字元(NULL character )替換掉已經查詢到的部分(包括分隔符)並重新儲存"新"串;如此迴圈,直到迴圈條件結束。    參考:http://biao3730.spaces.live.com/Blog/cns!3415F543A 07A7AE5!175.entry    也可以使用char *  __cdecl strtok(char *, const char *);(包含在標頭檔案中)    參考:http://baike.baidu.com/view/1028553.htm  或者自己寫個分割函式實現split的功能,  第三種:  一個這樣的字串:“123,456,789,0”。把他擷取成這樣的字串陣列 [123],[456],[789],[0]