void RemoveSpaces(char *source){
char* i=source;
char* j = source;
while(*j == ' '){
j++;
}
while(*j!=0){
*i++ = *j++;
}
/*edit:didn't work because 'i' pointed '\0'. İf we add here (i--;), will work */
i--;//edit1.
while(*i==' '){
i--;
}
*++i='\0';
}
当字符串的开头和结尾都有空格时,它可以正常工作,但是如果开头没有空格,则不能正常工作。为什么?
答案 0 :(得分:1)
void RemoveSpaces(char *source){
char* i=source;
char* j = source;
while(*j == ' '){
j++;
}
如果没有前导空格,则i和j相同(并保持相同)。
while(*j!=0){
*i++ = *j++;
}
您的循环在零终止符处停止。因此,您需要使用j而不是i从那里向后退:
添加了对零长度字符串的检查。
if(j > source){
while(*--j == ' ');
// while(*i==' '){
// i--;
// }
还可以使用j插入空终止符。
*++j='\0';
}
// *++i='\0';
}