从0下标开始,一个字符一个字符地自己向自己拷贝,当拷入一个空格时,将后面的空格跳过去。设置2个初值为0的变量i和j,i用来控制遍历原字符串数组,j用来记录新拷入的字符位置,用下面的代码就可实现!
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"
int main(void){
char str[1000]
int i,j
gets(str)
for(j=i=0str[i]i++){
if((str[j++]=str[i])==' '){//自己向自己拷贝,直到遇见' '
for(i++str[i]==' 'i++)//遇到' '跳过后面的' '
i--
}
}
str[j]='\0'//补个结束符
printf("%s\n",str)//打出来看看
return 0
}
假设字符串是这样的(_
表示
空格
,为了能看清,在相邻两个字符间放空格
)
"_
_
a
b
c"
第一个循环
while(*s=='
')
s++
使s指向第一个非空格的字符a
前面有
t=s
所以第二个训话
while(*t++=*s++)
就是
用a覆盖第一个空格
b覆盖第二个空格c覆盖a
对于
*t++=*s++
即
*(t++)=*(s++)
虽然++
的优先级高于*
但是
++在后
所以先使用t
s
然后才++
即相当于
*t
=
*s
t++
s++
另外
*t++=*s++
使做为while的
入口检测
表达式的
所以当s指向'\0'使
先*s了
所以会把
'\0'复制到*t