其他分享
首页 > 其他分享> > 基于CString的字符串分割类

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

 

标签:sSplitFlag,分割,CSplitStr,sData,void,CString,切分,字符串
来源: https://www.cnblogs.com/veis/p/16439651.html