程式開發中常需依特定分隔符號分割字串。CString 提供基礎操作,本文封裝通用分割類別 CSplitStr,支援連續分隔符合併處理。

class CSplitStr {
private:
CString m_sSplitFlag; // 分隔符號
BOOL m_bSequenceAsOne; // 連續分隔符視為一個
CString m_sData; // 待分割字串
public:
void GetSplitStrArray(CStringArray& array); // 取得分割結果
CString GetData(); void SetData(CString);
BOOL GetSequenceAsOne(); void SetSequenceAsOne(BOOL);
CString GetSplitFlag(); void SetSplitFlag(CString);
CSplitStr(); virtual ~CSplitStr();
};
void CSplitStr::GetSplitStrArray(CStringArray& array)
{
CString sData = GetData();
CString sFlag = GetSplitFlag();
if (sData.Right(1) != sFlag) sData += sFlag; // 確保結尾有分隔符
CString sTemp;
int pos = -1;
while ((pos = sData.Find(sFlag, 0)) != -1) {
sTemp = sData.Left(pos);
if (!GetSequenceAsOne()) {
array.Add(sTemp); // 保留空欄位
}
else {
if (!sTemp.IsEmpty()) // 連續分隔符合併,略過空欄位
array.Add(sTemp);
}
sData = sData.Right(sData.GetLength() - pos - 1);
}
}
#include
#include "SplitStr.h"
CSplitStr Split;
CString m_sText = _T("你好,,歡迎使用文本切分類,作者:江上飛鳥,qq: 36201365");
Split.SetSplitFlag(_T(","));
Split.SetSequenceAsOne(TRUE); // 合併連續分隔符
Split.SetData(m_sText);
CStringArray array;
Split.GetSplitStrArray(array);
// 結果:
// array[0] = "你好"
// array[1] = "歡迎使用文本切分類"
// array[2] = "作者:江上飛鳥"
// array[3] = "qq: 36201365"
CStringArray,易於遍歷