一个CString字符串中含有多个空格分隔的小属性,如何把它以空格分隔成多个CString字符串。
例题:一个CString字符串:张三 20 四川 14478899@qq.com 如何把每一个小属性分隔出来???
解决方法:
1、使用CString的查找函数来找到空格的位置,便可知晓某一个小属性的起点和终点位置。
int Find( TCHAR ch, int nStart ) const;
参数解释:ch为要查找的字符、nStart为开始查找的位置。
返回类型:查找成功,返回目标字符的位置;查找失败,返回-1
2、知晓起始位置后,便可取出这段字符串,使用CString的从中间取字串函数。
CString Mid( int nFirst, int nCount ) const;
参数解释:nFirst为起点位置、nCount为取的字串的长度(一般使用终点位置-起点位置获得字串的长度)
返回类型:返回取出的字符串
3、完整代码:这里有n行待处理CString串,分割每一行并放入CStringArray数组存储
for (int j = 0; j < n; j++)
{
int nPos = 0;
int nPre_pos = 0;
int count = 0;//用来定位属性在st里面的位置
while (-1 != nPos) {
//一次循环可以查一行的一个小属性
nPre_pos = nPos;
nPos = stusave[j].Find(' ', (nPos + 1));
//从(nPos + 1)开始找空格,找到就返回空格位置
switch (count)
{
case 0:
sno.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 1:
sname.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 2:
age.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 3:
sex.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 4:
born.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 5:
address.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 6:
phone.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
case 7:
emails.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
//文件每行的末尾必须有空格才能取出最后一个数据
default:
break;
}
count++;
}