欢迎来到我的博客https://www.cnblogs.com/veis/

https://www.cnblogs.com/veis/p/14182037.html

基于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);

        if(GetSequenceAsOne())
            sData = sData.TrimLeft(sSplitFlag);
    }
}

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();

 

posted @ 2022-07-03 12:50  veis  阅读(394)  评论(0编辑  收藏  举报