| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4165 人关注过本帖
标题:怎么从字符串中取出字符?
只看楼主 加入收藏
tangqz2010
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-10-26
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
怎么从字符串中取出字符?
我是一个刚学VC的菜鸟,想请教高手一下怎么从字符串中取出一个一个的字符,比方说有一个字符串CString  str="1A 23 13 2A 3B 3C 4E ",想从中取出'1A','23','13','2A','3B','3C','4E'.谢谢各位高手了。
搜索更多相关主题的帖子: 字符 
2010-10-26 21:27
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
可以直接用小标提取啊!

If You Want Something, Go Get It, Period.
2010-10-26 22:36
YESUNLONG
Rank: 2
来 自:广东省东莞市长安镇
等 级:论坛游民
帖 子:10
专家分:10
注 册:2010-10-29
收藏
得分:10 
我这里有个函数,可以改良使用:
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".
2010-10-29 23:17
myvc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:85
专家分:89
注 册:2009-10-25
收藏
得分:10 
在VC中可以直接调用函数:
str.Left(2);//结果:1A
str.Mid(3,2);//结果:23
str.Right(2);//4E
2010-10-31 22:07
kwbplcz
Rank: 2
等 级:论坛游民
帖 子:12
专家分:51
注 册:2010-11-3
收藏
得分:0 
这个问题其实就是数据的扩展和压缩问题,

例如有数据 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;
        }
}

真的不想研究技术.
2010-11-03 16:09
zfan85
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2010-8-30
收藏
得分:0 
直接指针一个一个过来就号了呀
2010-11-04 16:45
快速回复:怎么从字符串中取出字符?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017880 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved