字符串分割,求帮忙~

半雨微凉丶 2016-08-10 10:52:26
比如str = “0\\123\\0”
我想实现str1 = "0", str2 = "", str3 = "123",str4 = "", str5 = "0"
这种“\”分隔符的求教怎么弄
自己试了好多方法了,但是就是空的字符串分割不出来,
求大家帮帮忙,谢谢!
...全文
146 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
半雨微凉丶 2016-08-10
  • 打赏
  • 举报
回复
引用 10 楼 dingxz105090 的回复:
转义字符不知道怎么跟你说,反正如果你是自己在代码里写死一个文本串,那么2个\就会变成1个,比如 _T("0\\\\123\\\\0")实际上是0\\123\\0 而假如不是你用代码写死的,而是代码变量里保存的值,那么是什么就是什么 帖子这个问题你可以把这个分割弄成一个函数接口,下次直接传入一个CString变量就可以获得结果了

//分割字符串功能函数,传入一个str,返回一个结果vector
vector<CString> SplitStr(CString str)
{
	vector<CString> vctStr;//保存最终的结果
	int iStart = 0, iFind = -1;
	while((iFind = str.Find(_T("\\"), iStart)) != -1)
	{
		CString strRet = str.Mid(iStart, iFind - iStart);
		vctStr.push_back(strRet);

		iStart = iFind + 1;
	}
	vctStr.push_back(str.Mid(iStart));
	return vctStr;
}

//调用的时候就简单了
vector<CString> vctStr = SplitStr(_T("0\\\\123\\\\0"));
或者
vector<CString> vctStr = SplitStr(strTestStr);//strTestStr是你程序里其他的某个变量
好的 明白了 谢谢!
凌乱哥 2016-08-10
  • 打赏
  • 举报
回复
转义字符不知道怎么跟你说,反正如果你是自己在代码里写死一个文本串,那么2个\就会变成1个,比如 _T("0\\\\123\\\\0")实际上是0\\123\\0 而假如不是你用代码写死的,而是代码变量里保存的值,那么是什么就是什么 帖子这个问题你可以把这个分割弄成一个函数接口,下次直接传入一个CString变量就可以获得结果了

//分割字符串功能函数,传入一个str,返回一个结果vector
vector<CString> SplitStr(CString str)
{
	vector<CString> vctStr;//保存最终的结果
	int iStart = 0, iFind = -1;
	while((iFind = str.Find(_T("\\"), iStart)) != -1)
	{
		CString strRet = str.Mid(iStart, iFind - iStart);
		vctStr.push_back(strRet);

		iStart = iFind + 1;
	}
	vctStr.push_back(str.Mid(iStart));
	return vctStr;
}

//调用的时候就简单了
vector<CString> vctStr = SplitStr(_T("0\\\\123\\\\0"));
或者
vector<CString> vctStr = SplitStr(strTestStr);//strTestStr是你程序里其他的某个变量
凌乱哥 2016-08-10
  • 打赏
  • 举报
回复
引用 8 楼 zhao3132453 的回复:
如果本身就是“0\\123\\0”这种怎么分割呢?
那也能分割,只不过分割成了3个部分: 0 123 0 因为\是一个转义字符
半雨微凉丶 2016-08-10
  • 打赏
  • 举报
回复
引用 5 楼 dingxz105090 的回复:

	#include <vector>
	using namespace std;


	vector<CString> vctStr;//保存最终的结果
	CString str = _T("0\\\\123\\\\0");//也就是 0\\123\\0
	int iStart = 0, iFind = -1;
	while((iFind = str.Find(_T("\\"), iStart)) != -1)
	{
		CString strRet = str.Mid(iStart, iFind - iStart);
		vctStr.push_back(strRet);

		iStart = iFind + 1;
	}
	vctStr.push_back(str.Mid(iStart));
如果本身就是“0\\123\\0”这种怎么分割呢?
半雨微凉丶 2016-08-10
  • 打赏
  • 举报
回复
引用 6 楼 dingxz105090 的回复:
太感谢了!
凌乱哥 2016-08-10
  • 打赏
  • 举报
回复
凌乱哥 2016-08-10
  • 打赏
  • 举报
回复

	#include <vector>
	using namespace std;


	vector<CString> vctStr;//保存最终的结果
	CString str = _T("0\\\\123\\\\0");//也就是 0\\123\\0
	int iStart = 0, iFind = -1;
	while((iFind = str.Find(_T("\\"), iStart)) != -1)
	{
		CString strRet = str.Mid(iStart, iFind - iStart);
		vctStr.push_back(strRet);

		iStart = iFind + 1;
	}
	vctStr.push_back(str.Mid(iStart));
半雨微凉丶 2016-08-10
  • 打赏
  • 举报
回复
引用 3 楼 zwfgdlc 的回复:
CString::Tokenize
这个试过了,不行呀
zwfgdlc 2016-08-10
  • 打赏
  • 举报
回复
CString::Tokenize
半雨微凉丶 2016-08-10
  • 打赏
  • 举报
回复
新手呀,求代码
sevancheng 2016-08-10
  • 打赏
  • 举报
回复
CString str; str.Find() str.Mid()

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧