• 基于CString的字符串分割类


    1、头文件

    #pragma once
    
    class CSplitStr
    {
    private:
    	//切分的标志符号
    	CString m_sSplitFlag;
    	//连续的切分的标志符号当成一个标志处理
    	BOOL m_bSequenceAsOne;
    	//被切分的文本
    	CString m_sData;
    public:
    	CSplitStr();
    	virtual ~CSplitStr();
    	//得到切分好的文本串
    	void GetSplitStrArray(CStringArray& array);
    	//得到被切分的文本
    	CString GetData();
    	//设置被切分的文本
    	void SetData(CString sData);
    	//得到切分参数
    	BOOL GetSequenceAsOne() { return m_bSequenceAsOne; };
    	//设置切分参数
    	void SetSequenceAsOne(BOOL bSequenceAsOne) { m_bSequenceAsOne = bSequenceAsOne; };
    	//得到切分标志
    	CString GetSplitFlag() { return m_sSplitFlag; };
    	//设置切分标志
    	void SetSplitFlag(CString sSplitFlag) { m_sSplitFlag = sSplitFlag; };
    };

    2、源文件

    #include "pch.h"
    #include "CSplitStr.h"
    
    CSplitStr::CSplitStr()
    {
    	SetData(_T(""));
    	SetSequenceAsOne(TRUE);
    	SetSplitFlag(_T(","));
    }
    
    CSplitStr::~CSplitStr()
    {
    }
    
    void CSplitStr::SetData(CString sData)
    {
    	m_sData = sData;
    	m_sData.TrimLeft();
    	m_sData.TrimRight();
    }
    
    CString CSplitStr::GetData()
    {
    	return m_sData;
    }
    
    void CSplitStr::GetSplitStrArray(CStringArray& array)
    {
    	CString sData = GetData();
    	CString sSplitFlag = GetSplitFlag();
    	if (sData.Right(1) != sSplitFlag)
    	{
    		sData += sSplitFlag;
    	}
    	CString sTemp;
    	int pos = -1;
    	while ((pos = sData.Find(sSplitFlag, 0)) != -1)
    	{
    		sTemp = sData.Left(pos);
    		if (!GetSequenceAsOne())
    		{
    			array.Add(sTemp);
    		}
    		else
    		{
    			if (!sTemp.IsEmpty() && sTemp != _T("")) // 连续的分隔符视为单个处理
    			{
    				array.Add(sTemp);
    			}
    		}
    		sData = sData.Right(sData.GetLength() - pos - 1);
    	}
    }

    3、调用示例

    // INI配置文件获取字段
    // [CHIP_TYPE]
    // TYPE=NT98332,NT98331,MCU,
    
    CIniFileEdit::CfgStrStruct strTmp;
    CString strKeyValue;
    CSplitStr SplitStr;
    
    // 加载芯片类型:格式,字段内容+,:TYPE=NT98332,98331,...
    m_cfgFileEdit.SetFileHandle(lpszFilePath);
    strTmp.lpAppName = _T("CHIP_TYPE");
    strTmp.lpKeyName = _T("TYPE");
    strTmp.lpFileName = NULL;
    m_cfgFileEdit.GetProfileString(&strTmp, strKeyValue);
    
    // 分割字符串调用示例
    // 设置分隔符为','
    SplitStr.SetSplitFlag(_T(","));
    SplitStr.SetSequenceAsOne(TRUE);
    SplitStr.SetData(strKeyValue.GetString()); // 需要传入实际字符串地址
    SplitStr.GetSplitStrArray(m_TypeValArray.sBuf);
    m_TypeValArray.nLen = m_TypeValArray.sBuf.GetCount();

     

  • 相关阅读:
    Apache 2.4+php 5.4 安装
    Linux 进程状态
    解决Redhat Linux AS使用yum时出现This system is not registered with RHN的问题(改用CentOS的yum)
    nagios 事件处理
    awk调用shell命令的两种方法:system与print
    磁盘性能分析
    如何通过JQuery将DIV的滚动条滚动到指定的位置
    GCC Windows Linux 下编译学习1
    Linux命令
    GCC Windows Linux 下编译学习2
  • 原文地址:https://www.cnblogs.com/veis/p/16439651.html
Copyright © 2020-2023  润新知