《VC用字符串截取字符串的函数(比AfxExtractSubString更好)》原出处:
http://blog.csdn.net/jaketseng/archive/2007/11/25/1901623.aspx
该代码存在一些问题:
http://blog.csdn.net/jaketseng/archive/2007/11/25/1901623.aspx
该代码存在一些问题:
例:
Split(_T( " ,asfd,234sdf,0asdf,s0apf " ), dest, _T( " , " ));
截取后得到的字符串数组为: " ,asfd " 、 " ,234sdf " 、 " ,0asdf " 、 ""
【最后一个为空字符串,并不是期望的 " s0apf " 或 " ,s0apf " 】
Split(_T( " ,asfd,234sdf,0asdf,s0apf " ), dest, _T( " , " ));
截取后得到的字符串数组为: " ,asfd " 、 " ,234sdf " 、 " ,0asdf " 、 ""
【最后一个为空字符串,并不是期望的 " s0apf " 或 " ,s0apf " 】
修正后的代码如下:
INT_PTR Split_CString(
const
CString
&
source,
//
需要截取的原字符串
CStringArray & dest, // 分割后的字符串数组
const CString & division // 用做分割符的字符串
) // 使用方式:Split(strViewString, dest, "<div id="pro_detail">");
... {
if( source.IsEmpty() )
return -1;
dest.RemoveAll();
int len = division.GetLength();
int iFirst = 0;
int nCount = 0;
int pos = 0;
int pre_pos = -1;
while( -1 != pos )
...{
if( -1 == pre_pos )
pos = source.Find(division,pos);
else
pos = source.Find(division,(pos+1));
if( -1 == pre_pos )
...{
iFirst = 0;
if( -1 == pos )
nCount = source.GetLength();
else
nCount = pos;
}
else
...{
iFirst = pre_pos+len;
if( -1 != pos )
nCount = pos - pre_pos - len;
else
nCount = source.GetLength()-pre_pos-len;
}
dest.Add(source.Mid(iFirst,nCount));
pre_pos = pos;
}
return dest.GetCount();
}
CStringArray & dest, // 分割后的字符串数组
const CString & division // 用做分割符的字符串
) // 使用方式:Split(strViewString, dest, "<div id="pro_detail">");
... {
if( source.IsEmpty() )
return -1;
dest.RemoveAll();
int len = division.GetLength();
int iFirst = 0;
int nCount = 0;
int pos = 0;
int pre_pos = -1;
while( -1 != pos )
...{
if( -1 == pre_pos )
pos = source.Find(division,pos);
else
pos = source.Find(division,(pos+1));
if( -1 == pre_pos )
...{
iFirst = 0;
if( -1 == pos )
nCount = source.GetLength();
else
nCount = pos;
}
else
...{
iFirst = pre_pos+len;
if( -1 != pos )
nCount = pos - pre_pos - len;
else
nCount = source.GetLength()-pre_pos-len;
}
dest.Add(source.Mid(iFirst,nCount));
pre_pos = pos;
}
return dest.GetCount();
}
测试:
Split(_T("asfd,234sdf,0asdf,s0apf"), dest, _T(","));
截取后得到的字符串数组为:"asfd"、"234sdf"、"0asdf"、"s0apf"
Split(_T(",asfd,234sdf,0asdf,s0apf"), dest, _T(","));
截取后得到的字符串数组为:""、"asfd"、"234sdf"、"0asdf"、"s0apf"
Split(_T(",asfd,234sdf,0asdf,,s0apf"), dest, _T(","));
截取后得到的字符串数组为:""、"asfd"、"234sdf"、"0asdf"、""、"s0apf"