關於字串分割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]