A-A+
在VS C++中使用给定字符分割CString字符串
下面给出一个C++类CSplitStr,此类的作用是使用给定字符分割CString字符串,并将分割后的字符串放到CStringArray中返回。
SplitStr.h代码如下:
- #pragma once
- class CSplitStr : public CWnd
- {
- DECLARE_DYNAMIC(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;};
- protected:
- DECLARE_MESSAGE_MAP()
- };
SplitStr.cpp代码如下:
- #include "StdAfx.h"
- #include "SplitStr.h"
- #include "stdafx.h"
- #include "SplitStr.h"
- // CSplitStr
- IMPLEMENT_DYNAMIC(CSplitStr, CWnd)
- CSplitStr::CSplitStr()
- {
- SetData(L"");
- SetSequenceAsOne(TRUE);
- SetSplitFlag(L",");
- }
- CSplitStr::~CSplitStr()
- {
- }
- BEGIN_MESSAGE_MAP(CSplitStr, CWnd)
- END_MESSAGE_MAP()
- 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 !="") ////连续的分隔符视为单个处理
- {
- array.Add(sTemp);
- }
- }
- sData = sData.Right(sData.GetLength() - pos - 1);
- }
- }
类测试:
- CSplitStr lsv_Split;
- CString lsv_TestText = L"abc#def#ghi";
- CStringArray lav_Array;
- lsv_Split.SetSplitFlag(L"#");
- lsv_Split.SetSequenceAsOne(TRUE);
- lsv_Split.SetData(lsv_TestText);
- lsv_Split.GetSplitStrArray(lav_Array);
- int n = lav_Array.GetCount();
- CString lsv_Result;
- for(int i=0;i<n;i++)
- {
- lsv_Result = lav_Array[i];
- AfxMessageBox(lsv_Result);
- }