A-A+

在VS C++中使用给定字符分割CString字符串

2018年11月21日 C/C++ 阅读 993 views 次

下面给出一个C++类CSplitStr,此类的作用是使用给定字符分割CString字符串,并将分割后的字符串放到CStringArray中返回。

SplitStr.h代码如下:

  1. #pragma once
  2. class CSplitStr : public CWnd
  3. {
  4.     DECLARE_DYNAMIC(CSplitStr)
  5. private:
  6.     //切分的标志符号
  7.     CString m_sSplitFlag;
  8.     //连续的切分的标志符号当成一个标志处理
  9.     BOOL m_bSequenceAsOne;
  10.     //被切分的文本
  11.     CString m_sData;
  12. public:
  13.     CSplitStr();
  14.     virtual ~CSplitStr();
  15.     //得到切分好的文本串
  16.     void GetSplitStrArray(CStringArray &array);
  17.     //得到被切分的文本
  18.     CString GetData();
  19.     //设置被切分的文本
  20.     void SetData(CString sData);
  21.     //得到切分参数
  22.     BOOL GetSequenceAsOne() {return m_bSequenceAsOne;};
  23.     //设置切分参数
  24.     void SetSequenceAsOne(BOOL bSequenceAsOne) {m_bSequenceAsOne = bSequenceAsOne;};
  25.     //得到切分标志
  26.     CString GetSplitFlag() {return m_sSplitFlag;};
  27.     //设置切分标志
  28.     void SetSplitFlag(CString sSplitFlag) {m_sSplitFlag = sSplitFlag;};
  29. protected:
  30.     DECLARE_MESSAGE_MAP()
  31. };

SplitStr.cpp代码如下:

  1. #include "StdAfx.h"
  2. #include "SplitStr.h"
  3. #include "stdafx.h"
  4. #include "SplitStr.h"
  5. // CSplitStr
  6. IMPLEMENT_DYNAMIC(CSplitStr, CWnd)
  7. CSplitStr::CSplitStr()
  8. {
  9.     SetData(L"");
  10.     SetSequenceAsOne(TRUE);
  11.     SetSplitFlag(L",");
  12. }
  13. CSplitStr::~CSplitStr()
  14. {
  15. }
  16. BEGIN_MESSAGE_MAP(CSplitStr, CWnd)
  17. END_MESSAGE_MAP()
  18. void CSplitStr::SetData( CString sData )
  19. {
  20.     m_sData = sData;
  21.     m_sData.TrimLeft();
  22.     m_sData.TrimRight();
  23. }
  24. CString CSplitStr::GetData()
  25. {
  26.     return m_sData;
  27. }
  28. void CSplitStr::GetSplitStrArray( CStringArray &array )
  29. {
  30.     CString sData = GetData();
  31.     CString sSplitFlag = GetSplitFlag();
  32.     if (sData.Right(1) != sSplitFlag) sData +=sSplitFlag;
  33.     CString sTemp;
  34.     int pos =-1;
  35.     while ((pos=sData.Find(sSplitFlag,0)) != -1)
  36.     {
  37.         sTemp = sData.Left(pos);
  38.         if (!GetSequenceAsOne())
  39.         {
  40.             array.Add(sTemp);
  41.         }
  42.         else
  43.         {
  44.             if (!sTemp.IsEmpty() && sTemp !=""////连续的分隔符视为单个处理
  45.             {
  46.                 array.Add(sTemp);
  47.             }
  48.         }
  49.         sData = sData.Right(sData.GetLength() - pos - 1);
  50.     }
  51. }

类测试:

  1.     CSplitStr lsv_Split;
  2.     CString lsv_TestText = L"abc#def#ghi";
  3.     CStringArray lav_Array;
  4.     lsv_Split.SetSplitFlag(L"#");
  5.     lsv_Split.SetSequenceAsOne(TRUE);
  6.     lsv_Split.SetData(lsv_TestText);
  7.     lsv_Split.GetSplitStrArray(lav_Array);
  8.     int n = lav_Array.GetCount();
  9.     CString lsv_Result;
  10.     for(int i=0;i<n;i++)
  11.     {
  12.         lsv_Result = lav_Array[i];
  13.         AfxMessageBox(lsv_Result);
  14.     }
坐倚北风网站福利:本站用户可联系“HyperMesh钉子户”,免费获取Altair内部学习资料,包含HyperMesh,OptiStruct拓扑优化,HyperStudy(DOE+优化),电磁,流体等软件。联系微信cae-max
为您推荐:

给我留言

© 坐倚北风 版权所有 严禁镜像复制 苏ICP备15034888号. 基于 Ality 主题定制 AliCMS
联系邮箱:leanwind@163.con,微信公众号:数字化设计CAX联盟

用户登录

分享到: