当前位置: 代码迷 >> C语言 >> [求助]删多余字符问题...
  详细解决方案

[求助]删多余字符问题...

热度:131   发布时间:2006-08-06 19:02:13.0
[求助]删多余字符问题...

请教: 我写了一个,感觉好象思路不对,请指点好的方法! 多谢!!!
若再把一些Tab键(缩进)改为一个空格,应该怎么写?试了好多次都不行。

//要求:编一函数删除字符串中多余的空格 ,要求函数原型为 void delblank(char string[]);

void delbk(char *s)
{
int i,j=0;
char t[N];
for(i=0;s[i];i++)
{
if(s[i]==' '&&s[i+1]==' ') {t[j]=s[i];continue;} //这样好吗?
if(s[i]) t[j++]=s[i];
}
t[j]='\0';
strcpy(s,t);
}

搜索更多相关的解决方案: 字符  

----------------解决方案--------------------------------------------------------

for(i=0;s[i];i++)
{
if(s[i]==' '&&s[i+1]==' ') {t[j]=s[i];continue;} //这样好吗?
if(s[i]) t[j++]=s[i];
}

循环的条件跟s[i+1]明显有矛盾,s[i+1]在最后访问不可预知的存储单元,这是错误的。
虽然从结果来讲,应该没多大问题。
有个老潭的算法,应该不错,
  int i,j,k ;
char c;
char t[N];
i=j=k=0 ;
while(c=s[j++])
{

if(c==' ')
{
if(i==0)

{
    sprintf(t+k++,"%c",c);
i=1 ;
}

  }
else
{
sprintf(t+k++,"%c",c);
i=0 ;
}
}
t[j]='\0';
strcpy(s,t);


----------------解决方案--------------------------------------------------------
谢谢斑斑!我先理解一下...

再把一些Tab键(缩进)改为一个空格,应该怎么写?帮我大概讲一下把.
----------------解决方案--------------------------------------------------------
遇到Tab键,接收时直接改为空格.
if(c==9)c=' ';

----------------解决方案--------------------------------------------------------
明白了,多谢两位!
这样就行了:
void delbk(char *s)
{
int i,j=0,flag=0;
char t[N];
for(i=0;s[i];i++)
{
if(s[i]=='\t') s[i]=' ';
if(s[i]==' ')
{
if(!flag)
{t[j++]=s[i];flag=1;}
}
else {t[j++]=s[i];flag=0;}
}
t[j]='\0';
strcpy(s,t);
}
----------------解决方案--------------------------------------------------------
  相关解决方案