怎样去掉字符串中间的空格符?

public 2004-01-06 05:35:04
thanks
...全文
878 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostgdi731 2004-01-06
  • 打赏
  • 举报
回复
上边有点错,这个我已调试过的了:
find(char *s,int l)
{
int i,j;
for(i=0;i<l;i++)
{
if((strcmp(*(s+i),0x20)==0)) //这里判断字符串里有否空格。
{
for(j=i;j<l;j++)
{*(s+j)=*(s+j+1);} //这里是当有空格的时候,后边的每个字符向前进一步
i--;
}
}
}

main()
{char hehe[]={"wo shi wu di de"},*p;
p=hehe;
printf(hehe);
printf("\n");
find(p,sizeof(hehe)); //这里调用函数,其中sizeof是计算字符串长度
printf(hehe);
}
sharpblade 2004-01-06
  • 打赏
  • 举报
回复
CString str = "This is a simple";
str.trim();
qfly 2004-01-06
  • 打赏
  • 举报
回复
CString str= "sd oityo dfg";
str.Remove(' ');
lostgdi731 2004-01-06
  • 打赏
  • 举报
回复
to public(DarkTemplar):
还是自己的函数好用,起码可以很容易地在功能上进行自己的扩展。
lostgdi731 2004-01-06
  • 打赏
  • 举报
回复
真的想不到你们那么执着啊,我刚才的方法是对的,只是细节没改好,如果你懂的话其实根本不用看细节啦。
晕死。下边的绝对行的啦,别再告诉我看不明啊。^_^
find(char *s,int l)
{
int i,j,cl,flag=0;
for(i=0;i<l;i++)
{
if((strcmp(*(s+i),0x20)==0)) //这里判断字符串里有否空格。
{
cl=l-i; //计算剩余多少个字符(以当前i开始计算)
for(j=i;j<cl;j++)
{*(s+j)=*(s+j+1);} //这里是当有空格的时候,后边的每个字符向前进一步
*(s+l-flag)='\0'; //这里为填充尾(可以相对之前修改的尾)
flag++; //这里为上一句工作
}
}
}

main()
{char hehe[]={"wo shi wu di de"},*p;
p=hehe;
printf(hehe);
printf("\n");
find(p,sizeof(hehe)); //这里调用函数,其中sizeof是计算字符串长度
printf(hehe);
}
public 2004-01-06
  • 打赏
  • 举报
回复
空格符有很多种:\t,\n ....,
可以参考C函数isspace(char c)。
但是isspace功能不够完善,无法判断半角/全角空格。另外字符串中可能存在汉字!
checkyvc6 2004-01-06
  • 打赏
  • 举报
回复


void TrimAll(char *pszBuf)
{
int nLen = strlen(pszBuf);
char *pTemp = new char[nLen * sizeof(char)];

for(int i=0,int j=0; i<nlen; i++)
if( pszBuf[i] != char(0x20) )
{
pTemp[j++] = pszBuf[i];
}

strcpy(pszBuf,pTemp);
delete pTemp;

}
rockhard 2004-01-06
  • 打赏
  • 举报
回复
补充一句,传递给foo的内存空间应该是可以修改的
例子如果写成
char *temp ="abc e f g abc";//此内存是只读的

foo(temp);

会在运行时出错(有可能编译不通过)
rockhard 2004-01-06
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <string.h>

void foo(char * s)
{
char *t=s;
s--;
while(* ++s)
{
if(*s==' ')//可以去掉tab || *s=='\t'
continue;
*t++=*s;
}
*t=0;
}

int main(int argc, char* argv[])
{
char temp[]="abc e f g abc";

foo(temp);
cout<<temp<<endl;
return 0;
}

rockhard 2004-01-06
  • 打赏
  • 举报
回复
find(char *s,int l=sizeof(*s))

这句根本不能编译通过

另外就算过了,sizeof(*s)值总是1才对
lostgdi731 2004-01-06
  • 打赏
  • 举报
回复
如果遇到空格后后边的字符都退位的话可以这样:
find(char *s,int l=sizeof(*s))
{int i,j;
for(i=0;i<l;i++)
{
if(strcmp(s+i,'\0')); for(j=i;j<l-i;j++)
{s+j=s+j+1;}
}
别告诉我看不明白啊。 ^_^

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧