zoukankan      html  css  js  c++  java
  • MFC基础--CString的Tokenize()和_tcstok()的用法对比

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

         下面对字符串“%s111gdfafd%s 023232%s 1%s 2%s 3%s 4%s 0XFF0000%s fdas”用这两个函数都进行一些相同匹配分割处理,代码和结果对比如下:    

    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	023232%s	1%s	2%s	3%s	4%s	0XFF0000%s	fdac");
        CString Seperator = _T("1%s	");
        int Position = 0;
        CString Token;
    
        Token = sBuf.Tokenize(Seperator, Position);
        while(!Token.IsEmpty())
        {
            // Get next token.
            Token = sBuf.Tokenize(Seperator, Position);//从iStart位置取出字符串中含pszTokens分割符间的内容;
            
            TCHAR* szTrunc = new TCHAR[Token.GetLength() + 1];//将结果保存在堆里
            _tcscpy(szTrunc,Token);//结果拷贝
    
            std::wcout<<szTrunc<<std::endl;
    
            if (_tcslen(szTrunc) > 0)
            {
                delete [] szTrunc;
            }
    
        }
        system("pause");
        return 0;
    }
     

    _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	023232%s	1%s	2%s	3%s	4%s	0XFF0000%s	fdas");
        TCHAR seps[] = _T("1%s	");
        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;
    }

  • 相关阅读:
    CSharpGL(36)通用的非托管数组排序方法
    CSharpGL(35)用ViewPort实现类似3DMax那样的把一个场景渲染到4个视口
    CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL
    CSharpGL(33)使用uniform块来优化对uniform变量的读写
    CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换
    CSharpGL(31)[译]OpenGL渲染管道那些事
    CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
    Go如何使用数据库、缓存
    Go内置常用包
    从零开始基于go-thrift创建一个RPC服务
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3798693.html
Copyright © 2011-2022 走看看