CString类型的字符串分隔问题

zhouguoyu2000 2014-09-23 10:32:45

///****************************************************************************
//*
//* 函数指针: SplitCString
//* 描 述: 将字符串按给定的符号进行拆分
//* 创 建:
//*
//* 返 回: [int] - 拆分后的子串个数
//*
//* 函数参数 :[in] strIn - 需要进行拆分的字符串
//* [out] strAryRe- 拆分后的字符串数组
//* [in] c - 分割符
///****************************************************************************
int SplitCString(CString strIn, CStringArray& strAryRe, char division)
{
strAryRe.RemoveAll();
if (!strIn.IsEmpty())
{
int nCount = 0;
int nPos = -1;
nPos = strIn.Find(division);
CString strTemp = strIn;

while (nPos != -1)
{
CString strSubString = strTemp.Left(nPos);
strTemp = strTemp.Right(strTemp.GetLength() - nPos-1);
nPos = strTemp.Find(division);
nCount++;
strAryRe.Add(strSubString);
}

if (nCount == strAryRe.GetSize())
{
CString str;
int nSize = strIn.ReverseFind(division);
str = strIn.Right(strIn.GetLength()-nSize-1);
strAryRe.Add(str);
}
}

return strAryRe.GetSize();
}


有这样一个函数,是分隔CString类型的字符串的,返回值是CStringArray类型的数组
我想改成返回值是vector<CString>类型的,谁能改写一下??
...全文
168 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouguoyu2000 2014-09-23
  • 打赏
  • 举报
回复
引用 1 楼 pcradio 的回复:
int SplitCString(CString strIn, vector<CString>& out, char division)
{
	int index = 0; // 子串索引
	CString substr; 
	while(AfxExtractSubString(substr, strIn, index++, division))
	{
		out.push_back(substr);
	}
	if (index - 1 == 1) // 没有字串,这时得到的字串为本身
	{
		out.clear();
		return 0;
	}
	return index - 1;
}
谢谢,不过分割字符时,字符串里没有指定分割的字符时有问题 比如 "ABCDEF" 我按照' '(即空格)去分割字符串,因为没有空格,所以应该返回ABCDEF字符串本身 但是我调试了一下,发现返回的是空,请教该怎么修改一下??
快乐鹦鹉 2014-09-23
  • 打赏
  • 举报
回复
把参数类型改一下,把拆分后的CString加入到vector,很简单的阿,这也不自己做啊?
阿源是少年 2014-09-23
  • 打赏
  • 举报
回复
int SplitCString(CString strIn, vector<CString>& out, char division)
{
	int index = 0; // 子串索引
	CString substr; 
	while(AfxExtractSubString(substr, strIn, index++, division))
	{
		out.push_back(substr);
	}
	if (index - 1 == 1) // 没有字串,这时得到的字串为本身
	{
		out.clear();
		return 0;
	}
	return index - 1;
}
zhouguoyu2000 2014-09-23
  • 打赏
  • 举报
回复
引用 4 楼 pcradio 的回复:
[quote=引用 3 楼 zhouguoyu2000 的回复:] [quote=引用 1 楼 pcradio 的回复:]
int SplitCString(CString strIn, vector<CString>& out, char division)
{
	int index = 0; // 子串索引
	CString substr; 
	while(AfxExtractSubString(substr, strIn, index++, division))
	{
		out.push_back(substr);
	}
	if (index - 1 == 1) // 没有字串,这时得到的字串为本身
	{
		out.clear();
		return 0;
	}
	return index - 1;
}
谢谢,不过分割字符时,字符串里没有指定分割的字符时有问题 比如 "ABCDEF" 我按照' '(即空格)去分割字符串,因为没有空格,所以应该返回ABCDEF字符串本身 但是我调试了一下,发现返回的是空,请教该怎么修改一下??[/quote] 我是在没有匹配的时候特意返回空的,原本它应该返回本身的,你把
if (index - 1 == 1) // 没有字串,这时得到的字串为本身
    {
        out.clear();
        return 0;
    }
去掉就行了[/quote] 对,你在这里清空了。太感谢了,果然简洁明了多了
阿源是少年 2014-09-23
  • 打赏
  • 举报
回复
引用 3 楼 zhouguoyu2000 的回复:
[quote=引用 1 楼 pcradio 的回复:]
int SplitCString(CString strIn, vector<CString>& out, char division)
{
	int index = 0; // 子串索引
	CString substr; 
	while(AfxExtractSubString(substr, strIn, index++, division))
	{
		out.push_back(substr);
	}
	if (index - 1 == 1) // 没有字串,这时得到的字串为本身
	{
		out.clear();
		return 0;
	}
	return index - 1;
}
谢谢,不过分割字符时,字符串里没有指定分割的字符时有问题 比如 "ABCDEF" 我按照' '(即空格)去分割字符串,因为没有空格,所以应该返回ABCDEF字符串本身 但是我调试了一下,发现返回的是空,请教该怎么修改一下??[/quote] 我是在没有匹配的时候特意返回空的,原本它应该返回本身的,你把
if (index - 1 == 1) // 没有字串,这时得到的字串为本身
    {
        out.clear();
        return 0;
    }
去掉就行了

16,472

社区成员

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

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

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