Tum*_*oid 21
以下是linux内核修剪的方法,称为strstrip():
char *strstrip(char *s)
{
size_t size;
char *end;
size = strlen(s);
if (!size)
return s;
end = s + size - 1;
while (end >= s && isspace(*end))
end--;
*(end + 1) = '\0';
while (*s && isspace(*s))
s++;
return s;
}
Run Code Online (Sandbox Code Playgroud)
它基本上是一个更好的格式化和错误检查版本,以前的海报说.
这个问题看起来好像可能是一个家庭作业问题,所以我会斜着回答:查找isspace(3)和strlen(3)的手册页并使用指针算法.另外,根据手头的问题,您可能需要malloc(3)来保存结果的空间.
不要忘记C字符串的表示包括一个尾随的0字节,通常写为'\ 0',不计入字符串长度的一部分.
这是使用isspace的版本:
char * trim(char *c) {
char * e = c + strlen(c) - 1;
while(*c && isspace(*c)) c++;
while(e > c && isspace(*e)) *e-- = '\0';
return c;
}
Run Code Online (Sandbox Code Playgroud)
您可以完全就地完成此操作。
void stripLeadingAndTrailingSpaces(char* string){
assert(string);
/* First remove leading spaces */
const char* firstNonSpace = string;
while(*firstNonSpace != '\0' && isspace(*firstNonSpace))
{
++firstNonSpace;
}
size_t len = strlen(firstNonSpace)+1;
memmove(string, firstNonSpace, len);
/* Now remove trailing spaces */
char* endOfString = string + len;
while(string < endOfString && isspace(*endOfString))
{
--endOfString ;
}
*endOfString = '\0';
}
Run Code Online (Sandbox Code Playgroud)