基于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 By veis

浙公网安备 33010602011771号