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;
    }

  • 相关阅读:
    循环顺序队列
    iscsi与multipath
    MySQL 数据库设计 笔记与总结(4)维护优化
    [Swift]LeetCode6. Z字形变换 | ZigZag Conversion
    [Swift]八大排序算法(八):基数排序
    [Swift]八大排序算法(七):归并排序
    [Swift]八大排序算法(六):希尔排序
    [Swift]八大排序算法(五):插入排序
    [Swift]八大排序算法(四):堆排序
    [Swift]八大排序算法(三):选择排序 和 简单选择排序
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3798693.html
Copyright © 2011-2022 走看看