正文

VC拆分字符串2009-03-30 13:55:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/41859.html

分享到:

一._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 )替换掉已经查找到的部分(包括分隔符)并重新保存“新”串;如此循环,直到循环条件结束。 参考: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>中。 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 参考:http://www.vckbase.com/bbs/prime/viewprime.asp?id=353 三.自定义函数字符串分割函数 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(division,(pos+1));          dest.Add(source.Mid(pre_pos,(pos-pre_pos)));      } } 参数: Source:待分割的源串 divKey:分割符 dest:分割结果字符串数组 参考:http://www.diybl.com/course/3_program/c++/cppjs/2008321/105980.html

阅读(6867) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册