编程论坛
注册
登录
编程论坛
→
VC++/MFC
怎么从字符串中取出字符?
tangqz2010
发布于 2010-10-26 21:27, 4165 次点击
我是一个刚学VC的菜鸟,想请教高手一下怎么从字符串中取出一个一个的字符,比方说有一个字符串CString str="1A 23 13 2A 3B 3C 4E ",想从中取出'1A','23','13','2A','3B','3C','4E'.谢谢各位高手了。
5 回复
#2
m21wo
2010-10-26 22:36
可以直接用小标提取啊!
#3
YESUNLONG
2010-10-29 23:17
我这里有个函数,可以改良使用:
BOOL GetNextValue(CString& sSource,CString& sGet,const CString& cSeprator/*=','*/)
{
int nIdx= strSource.Find(cSeprator);
if (nIdx>=0){
LPTSTR pBeg = sGet.GetBuffer(nIdx);
strncpy(pBeg,(LPCTSTR)sSource,nIdx);
pBeg[nIdx]=0;
sGet.ReleaseBuffer();
sSource = (LPCTSTR)((LPCTSTR)sSource+nIdx+cSeprator.GetLength());
return true;
}else{
sGet = sSource;
return false;
}
}
函数使用办法是:
BOOL bRet;
CStringArray aCmdOut;
CString sTemp= "1A 23 13 2A 3B 3C 4E ";
for (;;){
bRet = GetNextValue(sSource,sTemp,' ');
aCmdOut.Add(sTemp);
if (!bRet){ return; }
}
这样子,字串数组中所存放的就是各段子串了.
可以这个直接使用: aCmdOut[0]=>"1A".
#4
myvc
2010-10-31 22:07
在VC中可以直接调用函数:
str.Left(2);//结果:1A
str.Mid(3,2);//结果:23
str.Right(2);//4E
#5
kwbplcz
2010-11-03 16:09
这个问题其实就是
数据的扩展和压缩
问题,
例如有数据 0x01,0x02,0x03,长度为3,
则扩展后得到字符串“010203”,长度为6,
又如有字符串“010203”,长度为6,
则压缩后得到字符串 0x01,0x02,0x03,长度为3,
有如下两个函数分别实现数据的扩展和压缩:
//将数据扩展,例如0x12 0xAC 0x0D则扩展为"12AC0D"
//参数:
//pSrc:要扩展的字符串
//pDest:扩展后的字符串
//len:要扩展的字符串的字符个数
//注意:任何字符串都可以扩展
程序代码:
void
uti_unpack(
unsigned
char
*pSrc,
unsigned
char
* pDest,
int
len)
{
unsigned
char
ch1, ch2;
for
(
int
i =
0
; i < len; i++ )
{
ch1 = (pSrc[i] &
0xF0
) >>
4
;
ch2 = pSrc[i] &
0x0F
;
ch1 += ( (ch1 >
9
) ?
0x37
:
0x30
);
ch2 += ( (ch2 >
9
) ?
0x37
:
0x30
);
pDest[i*
2
] = ch1;
pDest[i*
2
+
1
] = ch2;
}
}
//将数据压缩,例如"12AC0D"则压缩为0x12 0xAC 0x0D
//参数:
//pSrc:要压缩的字符串
//pDest:压缩后的字符串
//len:要压缩的字符串的字符个数
//注意:要压缩的字符串里的字符只能有"0-9 a-z A-Z"
程序代码:
void
uti_pack(
unsigned
char
*pSrc,
unsigned
char
*pDest,
int
len)
{
char
ch1, ch2;
for
(
int
i =
0
; i < (len /
2
); i++ )
{
ch1 = pSrc[i*
2
];
ch2 = pSrc[i*
2
+
1
];
(ch1 >=
'
a
'
&& ch1 <=
'
z
'
) ? (ch1 -=
32
) : (ch1);
(ch2 >=
'
a
'
&& ch2 <=
'
z
'
) ? (ch2 -=
32
) : (ch2);
ch1 -= ( (ch1 >
'
9
'
) ?
0x37
:
0x30
);
ch2 -= ( (ch2 >
'
9
'
) ?
0x37
:
0x30
);
pDest[i] = ( ch1 <<
4
) | ch2;
}
}
#6
zfan85
2010-11-04 16:45
直接指针一个一个过来就号了呀
1