VC字符串根据指定字符分割成CStringArray

本文介绍了一个使用C++实现的字符串分割类CSplitStr,该类能够将字符串按照指定的分隔符进行分割,并提供了处理连续分隔符的选项。通过设置不同的参数,可以灵活地对各种格式的字符串进行分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载连接: https://blog.youkuaiyun.com/rundll64/article/details/24548301

 

 
  1. SplitStr.h

  2.  
  3. #pragma once

  4.  
  5.  
  6. // CSplitStr

  7.  
  8. class CSplitStr : public CWnd

  9. {

  10. DECLARE_DYNAMIC(CSplitStr)

  11. private:

  12. //切分的标志符号

  13. CString m_sSplitFlag;

  14. //连续的切分的标志符号当成一个标志处理

  15. BOOL m_bSequenceAsOne;

  16. //被切分的文本

  17. CString m_sData;

  18. public:

  19. CSplitStr();

  20. virtual ~CSplitStr();

  21. //得到切分好的文本串

  22. void GetSplitStrArray(CStringArray &array);

  23. //得到被切分的文本

  24. CString GetData();

  25. //设置被切分的文本

  26. void SetData(CString sData);

  27. //得到切分参数

  28. BOOL GetSequenceAsOne() {return m_bSequenceAsOne;};

  29. //设置切分参数

  30. void SetSequenceAsOne(BOOL bSequenceAsOne) {m_bSequenceAsOne = bSequenceAsOne;};

  31. //得到切分标志

  32. CString GetSplitFlag() {return m_sSplitFlag;};

  33. //设置切分标志

  34. void SetSplitFlag(CString sSplitFlag) {m_sSplitFlag = sSplitFlag;};

  35.  
  36. protected:

  37. DECLARE_MESSAGE_MAP()

  38. };

  39.  
  40.  
 
  1. SplitStr.cpp

  2.  
  3. // SplitStr.cpp : 实现文件

  4. //

  5.  
  6. #include "stdafx.h"

  7. #include "SplitStr.h"

  8.  
  9.  
  10. // CSplitStr

  11.  
  12. IMPLEMENT_DYNAMIC(CSplitStr, CWnd)

  13.  
  14. CSplitStr::CSplitStr()

  15. {

  16. SetData("");

  17. SetSequenceAsOne(TRUE);

  18. SetSplitFlag(",");

  19. }

  20.  
  21. CSplitStr::~CSplitStr()

  22. {

  23. }

  24.  
  25.  
  26. BEGIN_MESSAGE_MAP(CSplitStr, CWnd)

  27. END_MESSAGE_MAP()

  28.  
  29. void CSplitStr::SetData( CString sData )

  30. {

  31. m_sData = sData;

  32. m_sData.TrimLeft();

  33. m_sData.TrimRight();

  34. }

  35.  
  36. CString CSplitStr::GetData()

  37. {

  38. return m_sData;

  39. }

  40.  
  41. void CSplitStr::GetSplitStrArray( CStringArray &array )

  42. {

  43. CString sData = GetData();

  44. CString sSplitFlag = GetSplitFlag();

  45. if (sData.Right(1) != sSplitFlag) sData +=sSplitFlag;

  46. CString sTemp;

  47. int pos =-1;

  48. while ((pos=sData.Find(sSplitFlag,0)) != -1)

  49. {

  50. sTemp = sData.Left(pos);

  51. if (!GetSequenceAsOne())

  52. {

  53. array.Add(sTemp);

  54. }

  55. else

  56. {

  57. if (!sTemp.IsEmpty() && sTemp !="") ////连续的分隔符视为单个处理

  58. {

  59. array.Add(sTemp);

  60. }

  61. }

  62. sData = sData.Right(sData.GetLength() - pos - 1);

  63. }

  64. }

  65.  
  66.  
  67.  
  68. // CSplitStr 消息处理程序

  69.  
  70.  

 

调用方法:

 

 

用法: CSplitStr Split;

CString m_sText = "鹅 鹅 鹅,曲项向天歌,白毛浮绿水,红掌拨清波";

Split.SetSplitFlag(",");

Split.SetSequenceAsOne(TRUE);

Split.SetData(m_sText);

CStringArray array;

Split.GetSplitStrArray(array);

AfxMessageBox(array[0]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值