急!!各位大侠求解换行问题,谢谢 在数组中acData[1024]中包含打印数据,例如:abcdefg\nabcdefg\n\n\nabcdefg怎样去掉连续的3个换行\n只保留一个. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 再分配一个1024的数组。把acData数组一个字节一字节拷过去。如果判断是\n就判断后面两个字节是不是\n,如果,就拷一个\n然后直接转到3个\n后面的字节去。 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;} 都写死了啊..也可能是2个连续的\n也可能是连续4个的\n,现在是只要有连续的\n只保留一个 你用CString::find()然后用CString::Replace() ?? 不对,直接CString::Replace(_T("\n\n\n"),_T("\n")); 利用ascii码试试,这个遍历一遍字符串,判断他的ascii码值,如果是10那么就是‘\n’。 不能这么搞吧?楼主只是给出一个示例3个“\n”而已,其数据格式应该是随机的才对。没有更好的办法,只能搞个算法,查找“\n”的连接状态,然后CString.Replace(). 你只要把我给你的代码==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;} CString strNew;strNew.Format("%s", acData);while(strNew.Replace("\n\n"), "\n"){} MFC中的绘图不显示问题 ActiveX能否对事件进行封装?供IE(javascript)调用? 哪种开发平台使用起来最方便 初级问题:WTL中如何根据HDC来划各种类型的线呢? 几个问题 help! 说看过侯捷的深入浅出MFC,它里面模拟的巨集看不懂 怎么改变一个控件的字体大小和颜色? 请问在vc++里怎么调c程序?谢谢 我做了一个在Document/View中使用dialog作为向导的程序,但有个讨厌的问题。。。。。。 不同类中函数的相互调用 如何获取补丁的详细安装环境信息
把acData数组一个字节一字节拷过去。如果判断是\n就判断后面两个字节是不是\n,如果,就拷一个\n然后直接转到3个\n后面的字节去。
{
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;
}
然后用CString::Replace() ??
{
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;
}
CString strNew;
strNew.Format("%s", acData);
while(strNew.Replace("\n\n"), "\n")
{
}