在数组中acData[1024]中包含打印数据,例如:abcdefg\nabcdefg\n\n\nabcdefg
怎样去掉连续的3个换行\n只保留一个.

解决方案 »

  1.   

    再分配一个1024的数组。
    把acData数组一个字节一字节拷过去。如果判断是\n就判断后面两个字节是不是\n,如果,就拷一个\n然后直接转到3个\n后面的字节去。
      

  2.   

    int ConvertBuf(char*pBuf,int nBufLeng)
    {
    int nNum = 0;
    if (pBuf)
    {
    char *pFind = NULL;
    int nFind = 0;
    int nCNum = 0;
    for (int i=0;i<nBufLeng;i++)
    {
    pFind = (pBuf + nFind);
    if (*pFind == '\n')
    {
    nCNum ++;
    if (nCNum==3)
    {
    memmove(pFind-1,pFind+1,nBufLeng-i+1);
    nBufLeng -= 2;
    nNum ++;
    }
    nFind ++;
    }
    else
    {
    nFind ++;
    nCNum = 0;
    }
    }
    }
    return nNum;
    }
      

  3.   

    都写死了啊..也可能是2个连续的\n也可能是连续4个的\n,现在是只要有连续的\n只保留一个
      

  4.   

    你用CString::find()
    然后用CString::Replace() ??
      

  5.   

    不对,直接CString::Replace(_T("\n\n\n"),_T("\n"));
      

  6.   

    利用ascii码试试,这个遍历一遍字符串,判断他的ascii码值,如果是10那么就是‘\n’。
      

  7.   

    不能这么搞吧?楼主只是给出一个示例3个“\n”而已,其数据格式应该是随机的才对。没有更好的办法,只能搞个算法,查找“\n”的连接状态,然后CString.Replace().
      

  8.   

    你只要把我给你的代码==3的地方改为>1就可以了。int ConvertBuf(char*pBuf,int nBufLeng)
    {
    int nNum = 0;
    if (pBuf)
    {
    char *pFind = NULL;
    int nFind = 0;
    int nCNum = 0;
    for (int i=0;i<nBufLeng;i++)
    {
    pFind = (pBuf + nFind);
    if (*pFind == '\n')
    {
    nCNum ++;
    if (nCNum>1)
    {
    memmove(pFind-1,pFind+1,nBufLeng-i+1);
    nBufLeng -= 2;
    nNum ++;
    }
    nFind ++;
    }
    else
    {
    nFind ++;
    nCNum = 0;
    }
    }
    }
    return nNum;
    }
      

  9.   


    CString strNew;
    strNew.Format("%s", acData);
    while(strNew.Replace("\n\n"), "\n")
    {
    }