请教: 我写了一个,感觉好象思路不对,请指点好的方法! 多谢!!!
若再把一些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);
}
----------------解决方案--------------------------------------------------------