VC拆分字符串的三个函数
一. _tcstok 函数
在 MFC 中,一个 CString str=“ab ac dd PM” ,怎么把他分开成 ab 和 ac 和 dd 和 PM 这四个字符串,类似string 的 split 的功能?
_tcstok 声明头文件 : <TCHAR.H>
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 )替换掉已经查找到的部分(包括分隔符)并重新保存 “ 新 ” 串;如此循环,直到循环条件结束。
二. AfxExtractSubString 函数
此外,用 AfxExtractSubString 函数可解析复合串。包含在头文件 < AFXWIN.H > 中。
BOOL AfxExtractSubString (CString & rString , LPCTSTR lpszFullString , int iSubString , TCHAR chSep /* = */ )
参数 :
rString :用来存放你取出的子串
lpszFullString :要拆分的整个字符串
iSubString :你要取的子字符串位置,从 0 开始
chSep :特定分割符
//========test2:AfxExtractSubString========
CString str = _T ("192.168.89.125" );
CString output = "" ;
for (int i =0; i <4; i ++)
{
AfxExtractSubString (output , str , i , '.' );
printf ("%s/n" ,output );
}
//==============test2:end==================
执行结果如下:
192
168
89
125
三.自定义函数字符串分割函数
void Split (CString source , CString divKey, CStringArray & dest )
{
dest .RemoveAll ();
int pos = 0;
int pre_pos = 0;
while ( -1 != pos ){
pre_pos = pos ;
pos = source .Find&nb, sp;(division ,(pos +1));
dest .Add (source .Mid (pre_pos ,(pos -pre_pos )));
}
}
参数:
Source :待分割的源串
divKey: 分割符
dest: 分割结果字符串数组