一个CString字符串,如何将它分成几段保存在CstringArray,或者vector中

MagicFuzzX 2012-06-14 05:32:05
比如CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD");

其中以|为标志,将上面的字符串分为5段,该怎么写啊~~
...全文
510 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
grf9527 2012-06-15
  • 打赏
  • 举报
回复
getlenth

find

left

right

去查下cstring的这几个方法,想怎么组织都可以
csucdl 2012-06-15
  • 打赏
  • 举报
回复
CString有Tokenize函数
  • 打赏
  • 举报
回复
MFC的
	CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD");
CStringArray arr;
LPTSTR p =_tcstok( strTest.GetBuffer() , TEXT("|") );
while( p != 0 )
{
arr.Add( p);
p = _tcstok( 0 , TEXT("|") );
}

strTest.ReleaseBuffer();
yyyyy_3 2012-06-15
  • 打赏
  • 举报
回复
Find()
hztj2005 2012-06-14
  • 打赏
  • 举报
回复
8楼正解
oldmanzhao 2012-06-14
  • 打赏
  • 举报
回复
给你推荐个函数吧AfxExtractSubString
小新小小新 2012-06-14
  • 打赏
  • 举报
回复
LS的真简练,不错要vs2005以上的,难怪没怎么见过,用VC6.0的飘过
zgl7903 2012-06-14
  • 打赏
  • 举报
回复

CStringT::Tokenize


CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD");
CStringArray szArray;

int curPos= 0;
while(1)
{
CString resToken= str.Tokenize(_T("|"), curPos);
if(resToken.IsEmpty())
break;
szArray.Add(resToken);
}

罗平 2012-06-14
  • 打赏
  • 举报
回复
//字符串分割函数,放到strArray数组
//调用方法: CStrLib::StrSplit(cstringArray,L"aaaa|bbbb|cccc|",L"|"); //最后参数为分隔符

void CStrLib::StrSplit(CStringArray &strArray,CString sStr, CString fgStr)
{
CString strTemp;
int nIndex=0, nLast=0;
while(nIndex!=-1)
{
nIndex=sStr.Find(fgStr,nLast); //查找分隔符
if(nIndex!=-1)
{
strTemp=sStr.Mid(nLast,nIndex-nLast); //获得字串
nLast=nIndex+1; //重新定义起始位置
}
else
{
strTemp=sStr.Mid(nLast,sStr.GetLength()-nLast); //最后的字串
}
strArray.Add(strTemp); //添加到数组
}
}
fronz 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
i是下标,分隔符用''单引号括起来(不知道我是否用中文格式了?),再写一遍
for(int i=0;i<4;i++) AfxExtractSubString(data[i],strTest,i,'|');
[/Quote]
hyqok 2012-06-14
  • 打赏
  • 举报
回复
//按照你的要求,我改写了前辈的代码,请测试

#include <afx.h>
#include <afxcoll.h>

/*
* 该函数用delimits里的字符拆分s,传出一个CStringArray指针pStrArr,
* 若trim为真,则不保留分割后的空串(注意不是空白字符)。比如:
* Tokenize( "a,bc;,d,", ",;", &out_list, TRUE)
* 会返回3个串:a、bc、d。
* 若trim为FALSE,则用nullSubst用来替代分割后的空串,比如:
* Tokenize( "a,bc;,d;", ",;", &out_list, FALSE,"[null]" )
* 会返回5个串:a、bc、[null]、d、[null]。
* trim默认为FALSE,nullSubst默认为空串。
*/
void TokenizeEx(CString s, CString delimits, CStringArray* pStrArr, BOOL trim=FALSE, CString nullSubst="")
{
ASSERT( !s.IsEmpty() && !delimits.IsEmpty() );
s += delimits[0];
for( long index=-1; (index=s.FindOneOf((LPCTSTR)delimits))!=-1; )
{
if(index != 0) pStrArr->Add( s.Left(index) );
else if(!trim) pStrArr->Add(nullSubst);
s = s.Right(s.GetLength()-index-1);
}
}

void main()
{
CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD");
CStringArray* pStrArr = new CStringArray();
TokenizeEx(strTest,"|",pStrArr,TRUE);
int isize = pStrArr->GetSize();
for (int i=0;i<isize;i++)
{
printf((CString)pStrArr->GetAt(i)+"\n");
}

}
fronz 2012-06-14
  • 打赏
  • 举报
回复
CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD");
CString data[4];

没能力给你弄出5段,只有4段(明明只有三个分隔符嘛):
for(int i=0;i<4;i++) AfxExtractSubString(data[i],strTest,i,'|');
oyljerry 2012-06-14
  • 打赏
  • 举报
回复
strtok() 以|为分隔符
tankgreat 2012-06-14
  • 打赏
  • 举报
回复
std::vector<CString> vec;

CString strTest = TEXT("JHSFSDHS|HASDFJKSKF|5465465|DBHBASD");

int nPos = strTest.Find('|');
CString strTemp = strTest.Mid(0, nPos);
vec.push_back(strTemp);

int nPos2 = strTest.Find('|', nPos + 1);
strTemp = strTest.Mid(nPos + 1, nPos2 - nPos - 1);
vec.push_back(strTemp);

int nPos3 = strTest.Find('|', nPos2 + 1);
strTemp = strTest.Mid(nPos2 + 1, nPos3 - nPos2 - 1);
vec.push_back(strTemp);

int nPos4 = strTest.Find('|', nPos3 + 1);
if (nPos4 = -1)
{
nPos4 = strTest.ReverseFind('|');
strTemp = strTest.Mid(nPos4 + 1, strTest.GetLength() - 1);
}
vec.push_back(strTemp);

CstringArray应该知道怎么写了吧?
无趣 2012-06-14
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080905/00/e87184ed-b6de-47b1-a6c7-d448d8e10ef2.html

讨论挺详细,还有源码哦。

16,471

社区成员

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

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

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