| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5464 人关注过本帖
标题:如何将输入的字符以空格隔开输出?
只看楼主 加入收藏
jiayou_yatou
Rank: 2
等 级:论坛游民
帖 子:33
专家分:15
注 册:2010-5-17
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:5 
如何将输入的字符以空格隔开输出?
比如我输入了一串字符:SFGHKJKLHJG,想要输出为:SF GH KJ KL HJ G
在下面的程序中如何实现?
void CSCommTestDlg::OnComm()
{
    // TODO: Add your control notification handler code here
    int i;
    VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;   
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.   
    CString strtemp;   
    if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符   
    {             ////////以下你可以根据自己的通信协议加入处理代码      
        variant_inp=m_ctrlComm.GetInput(); //读缓冲区      
        safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量        
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度        
        for(k=0;k<len;k++)            
            safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组      
        for(k=0;k<len;k++) //将数组转换为Cstring型变量      
        {            
            BYTE bt=*(char*)(rxdata+k); //字符型
            // BYTE bt[100]=*(char*)(rxdata+k);
            //for(i=0;i<10;i++)
            //{
            //    if(((bt[i]>='0')&&(bt[i]<='9'))||((bt[i]>='A')&&(bt[i]<='F')))
            if(m_ctrlHexDiaplay.GetCheck())
                //strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
            //{for(i=0;i<10;i++)
                //strtemp.Format("%c%c",bt[2*i],bt[2*i+1]);}
            strtemp.Format("%s ",bt);
            else
                //strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放  
                strtemp.Format("%02X ",bt);
            m_strRXData+=strtemp; //加入接收编辑框对应字符串      
        }   
    }   
    UpdateData(FALSE); //更新编辑框内容
}
搜索更多相关主题的帖子: 空格 字符 隔开 输出 输入 
2010-08-14 16:37
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
没测试,不过感觉可行。不妥之处,再讨论。   
程序代码:
CString s1;
    s1 = "ABCDEFGHIJKLMNOPQR";

    char* pszStr= (char*)malloc(s1.GetLength() * sizeof(char) * 2 + 1);
    const char* pFlg = s1.GetBuffer(2);
    unsigned int TestZero = 0;

    memset(pszStr,0,s1.GetLength() * sizeof(char) * 2 + 1);

    while(TestZero = (*(unsigned int*)pFlg&0xFFFFFFFF))
    {
        if(!(TestZero & 0xFF))
            break;
        if(!(TestZero & 0xFF00))
        {
            strcpy(pszStr + strlen(pszStr),pFlg);
            break;
        }
   
        strncpy(pszStr + strlen(pszStr),pFlg,2);
        lstrcat(pszStr," ");
        pFlg +=2;
        continue;   
    }


举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-14 21:26
jiayou_yatou
Rank: 2
等 级:论坛游民
帖 子:33
专家分:15
注 册:2010-5-17
收藏
得分:0 
你好,你能根据我给的程序编写这个程序吗?
2010-08-15 20:26
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
以下是引用jiayou_yatou在2010-8-15 20:26:05的发言:

你好,你能根据我给的程序编写这个程序吗?
??
问题可以讨论。作业不敢代劳!

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-15 21:03
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
给个封装好的函数:

程序代码:
BOOL FmtSpcOut(CString InStr,char* OutBuf,int OutBufLen)               //要处理的CString对象,输出缓冲区,输出缓冲区长度。
{
   
    if(OutBufLen < InStr.GetLength() * sizeof(char) * 2 + 1)             //如果输入缓冲区小于需求
        return FALSE;
   
    memset(OutBuf,0,InStr.GetLength() * sizeof(char) * 2 + 1);    //输出缓冲区清零

    const char* pFlg = InStr.GetBuffer(2);                        //获得输入CString对象的数据指针
    unsigned int TestZero = 0;                                    //按 双字 加快处理
   
    while(TestZero = (*(unsigned int*)pFlg&0xFFFFFFFF))     //如果双字不为0
    {
        if(!(TestZero & 0xFF))                             //第一字节为0,表示字符串已中止
            break;
        if(!(TestZero & 0xFF00))                           //本次读取只有一字节有效
        {
            strcpy(OutBuf + strlen(OutBuf),pFlg);          //拷贝一字节
            break;                                         //退出
        }
       
        strncpy(OutBuf + strlen(OutBuf),pFlg,2);           //字有效,拷贝2字节
        lstrcat(OutBuf," ");                               //加空格
        pFlg +=2;                                          //移动源串指针
        continue;                                          //继续
    }
    return TRUE;
}



[ 本帖最后由 东海一鱼 于 2010-8-15 23:01 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-15 22:07
jiayou_yatou
Rank: 2
等 级:论坛游民
帖 子:33
专家分:15
注 册:2010-5-17
收藏
得分:0 
不是作业,不过还是谢谢你。
2010-08-16 11:00
快速回复:如何将输入的字符以空格隔开输出?
数据加载中...
 
   



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

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