VC拆分字符串

来源:互联网 发布:农大网络教育 编辑:程序博客网 时间:2024/04/20 07:21

一._tcstok函数

MFC中,一个CString str=“ab ac dd PM”,怎么把他分开成abacddPM这四个字符串,类似stringsplit的功能?

_tcstok声明头文件<TCHAR.H>

char*_tcstok( char* strToken, const char*strDelimit );

该函数是可以从一个CString串中,根据提供的分隔符,截取并返回一个一个的Token

参数

strToken:是一个要分析的串;这个串中包含一个或者多个Token,当然还有分隔符,也有可

能有其他的字符;

strDelimit:是分隔符;根据分隔符把strToken中的Token分析出来;

//==============test1:_tcstok===============

//将以空格符为分隔符对str进行分割

CStringstr = _T("192.168.89.125");

TCHARseps[] = _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!3415F543A07A7AE5!175.entry

可以使用char *  __cdecl strtok(char *,const char *);(包含在头文件<string.h>)

参考:http://baike.baidu.com/view/1028553.htm

二.AfxExtractSubString函数

此外,用AfxExtractSubString函数可解析复合串。包含在头文件<AFXWIN.H>中。

BOOLAfxExtractSubString(CString&rString, LPCTSTRlpszFullString, intiSubString, TCHARchSep /* = */ )

参数

rString:用来存放你取出的子串

lpszFullString:要拆分的整个字符串

iSubString:你要取的子字符串位置,从0开始

chSep:特定分割符

//========test2:AfxExtractSubString========

举例说明:

CString str = _T("abc45,78ea,679u,368");

CString strSub;

AfxExtractSubString(strSub, (LPCTSTR)str, 0, ',');  // strSub的内容为abc45

AfxExtractSubString(strSub, (LPCTSTR)str, 3, ',');  // strSub的内容为368

注意:用于分割的只能是字符,不能是字符串。

多个字符使用_tcstok函数。

//==============test2:end==================

执行结果如下:

 

参考http://www.vckbase.com/bbs/prime/viewprime.asp?id=353

三.自定义函数字符串分割函数

voidSplit(CString source, CString divKey, CStringArray& dest)

{

    dest.RemoveAll();

    int pos = 0;

    int pre_pos = 0;

    while( -1 != pos ){

        pre_pos = pos;

        pos = source.Find(division,(pos+1));

        dest.Add(source.Mid(pre_pos,(pos-pre_pos)));

    }

}

参数:

Source:待分割的源串

divKey:分割符

dest:分割结果字符串数组

原创粉丝点击