ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MFC基础--CString的Tokenize()和_tcstok()的用法对比

2020-12-14 19:59:03  阅读:290  来源: 互联网

标签:MFC -- CString TCHAR int Token token include


     Tokenize()和_tcstok()都是用来分割字符串的方法。但是其各自的使用还是有很多不同。

     下面对字符串“%s111gdfafd%s\t023232%s\t1%s\t2%s\t3%s\t4%s\t0XFF0000%s\tfdas”用这两个函数都进行一些相同匹配分割处理,代码和结果对比如下:    

Tokenize():

复制代码
#include "stdafx.h"
#pragma once

#include <stdio.h>
#include <tchar.h>
#include <vector>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif

#include <afx.h>
#include <afxwin.h> // MFC 核心组件和标准组件
#include <iostream>//函数功能:按指定长度截取字符串前面的部分

int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[])
{
CString sBuf=_T(" %s111gdfafd%s\t023232%s\t1%s\t2%s\t3%s\t4%s\t0XFF0000%s\tfdac");
CString Seperator = _T(“1%s\t”);
int Position = 0;
CString Token;

Token </span>=<span style="color: rgba(0, 0, 0, 1)"> sBuf.Tokenize(Seperator, Position);
</span><span style="color: rgba(0, 0, 255, 1)">while</span>(!<span style="color: rgba(0, 0, 0, 1)">Token.IsEmpty())
{
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get next token.</span>
    Token = sBuf.Tokenize(Seperator, Position);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">从iStart位置取出字符串中含pszTokens分割符间的内容;</span>
TCHAR* szTrunc = new TCHAR[Token.GetLength() + 1]; // 将结果保存在堆里 _tcscpy(szTrunc,Token); // 结果拷贝 std::wcout<<szTrunc<< std::endl;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (_tcslen(szTrunc) &gt; <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">)
    {
        delete [] szTrunc;
    }

}
system(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pause</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;

}

复制代码  

_tcstok():

复制代码
#include "stdafx.h"
#pragma once
#include <stdio.h>
#include <tchar.h>
#include <vector>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif

#include <afx.h>
#include <afxwin.h> // MFC 核心组件和标准组件
#include <iostream>//函数功能:按指定长度截取字符串前面的部分

int _tmain(int argc, _TCHAR* argv[], TCHAR* envp[])
{
CString str = _T("%s111gdfafd%s\t023232%s\t1%s\t2%s\t3%s\t4%s\t0XFF0000%s\tfdas");
TCHAR seps[] = _T(“1%s\t”);
TCHAR* token = _tcstok( str.GetBuffer(), seps );
while( token != NULL )
{
//MessageBox( token, token, MB_OK );
//MessageBox(_T(“dfzdsas”));
std::wcout<<token<<std::endl;
token = _tcstok( NULL, seps );//这一句删去会导致无限循环
}
system(“pause”);
return 0;
}

复制代码

标签:MFC,--,CString,TCHAR,int,Token,token,include
来源: https://blog.csdn.net/u013463707/article/details/111184114

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有