- 论坛徽章:
- 0
|
在c和指针的第四章有一道练习题如下:
从一个字符串中去除多余的空格,如有有两个以上的多余空格,那么保留一个空格.
如果在不开辟额外空间的情况下,给出了如下答案:但是我感觉是有问题的.我上机试了下,似乎也有问题.不知道是我太菜还是怎么样?
同志们有没有什么好的办法?谢谢.
/*
** Shrink runs of white space in the given string to a single space.
*/
#define NUL ’\0’
void
deblank( char *string )
{
char *dest;
char *src;
int ch;
/*
** Set source and destination pointers to beginning of the string, then
** move to 2nd character in string.
*/
src = string;
dest = string++;
/*
** Examine each character from the source string.
*/
while( (ch = *src++) != NUL ){
if( is_white( ch ) ){
/*
** We found white space. If we’re at the beginning of
** the string OR the previous char in the dest is not
** white space, store a blank.
*/
if( src == string || !is_white( dest[–1] ) )
*dest++ = ’ ’;
}
else {
/*
** Not white space: just store it.
*/
*dest++ = ch;
}
}
*dest = NUL;
}
int
is_white( int ch )
{
return ch == ’ ’ || ch == ’\t’ || ch == ’\v’ || ch == ’\f’ || ch == ’\n’
|| ch == ’\r’;
}
|
|
|