CString分割切分 实现SplitCString

本文介绍了一种使用 CStringArray 在 C++ 中进行字符串分割的方法。该函数通过指定分隔符来分割字符串,并将结果存储在一个引用传递的 CStringArray 对象中。注意由于 CObject 的限制,CStringArray 不能作为函数的返回值。

直接上代码

说明:CStringArray只能用引用传入,不可以作为函数返回值,因为CStringArray集成的CObject不支持复制构造

void SplitCString(const CString& _cstr, const CString& _flag, CStringArray& _resultArray)
{
	CString strSrc(_cstr);

	CStringArray& strResult = _resultArray;
	CString strLeft = _T("");

	int nPos = strSrc.Find(_flag);
	while(0 <= nPos)
	{
		strLeft = strSrc.Left(nPos);
		if (!strLeft.IsEmpty())
		{
			strResult.Add(strLeft);
		}
		strSrc = strSrc.Right(strSrc.GetLength() - nPos - 1);
		nPos = strSrc.Find(_flag);
	}

	if (!strSrc.IsEmpty()) {
		strResult.Add(strSrc);
	}
}


在使用 `CString` 进行字符串分割操作时,通常需要依赖特定的实现逻辑或者类库。以下是几种常见的方法及其实现指南。 ### 使用自定义类 `CSplitStr` 实现分割 该方法基于一个自定义的类 `CSplitStr`,它继承自 `CWnd` 并封装了字符串分割功能。此类提供了设置被切分文本、分割标志以及是否将连续的分割符号视为一个标志的能力。通过调用 `GetSplitStrArray()` 方法,可以获取分割后的结果。 ```cpp // 示例:使用 CSplitStr 类进行分割 CSplitStr splitter; splitter.SetData(_T("Hello,World,How,Are,You")); // 设置原始数据 splitter.SetSplitFlag(_T(",")); // 设置分割标志 splitter.SetSequenceAsOne(TRUE); // 将连续的分割符当作一个处理 CStringArray resultArray; splitter.GetSplitStrArray(resultArray); // 获取分割后的结果数组 ``` 此方法适用于对分割逻辑有较高定制化需求的场景,并且可以通过调整参数来控制分割行为(例如忽略多个连续的分隔符)[^1]。 ### 直接使用函数 `SplitCString` 实现分割 这种方法不依赖于类,而是直接通过一个函数实现字符串的分割。该函数接受源字符串、分割符以及一个用于存储结果的 `CStringArray` 对象作为参数。它会移除指定字符(如星号和空格),然后逐步查找分割符并提取子字符串。 ```cpp // 示例:使用 SplitCString 函数进行分割 CString source = _T("Apple*Banana*Cherry*Doughnut"); CString gap = _T("*"); // 分割CStringArray results; SplitCString(source, gap, results); // 执行分割 // 遍历结果 for (int i = 0; i < results.GetSize(); ++i) { AfxMessageBox(results[i]); // 显示每个分割后的字符串 } ``` 此函数适合快速实现分割功能,而不需要额外创建类实例的情况。需要注意的是,在分割之前会先移除源字符串中的某些字符(如星号和空格),这可能会影响最终输出的结果[^2]。 ### 其他替代方案 如果项目允许引入第三方库,则可以考虑使用标准模板库(STL)中的 `std::string` 和相关算法(如 `std::getline()`)来完成更简洁高效的字符串分割操作。这种方式更加灵活且跨平台支持良好。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值