strtrim 函数我个人认为比较好理解,strtrim_fast是我从别人的论坛中借鉴过来的,个人不认为会在大部分的情况下strtrim_fast会比strtrim 快,举个简单的case,如果回溯的次数很低,strtrim的速度应该会比strstrim_fast的速度快
/*
* strtrim 去掉字符串前后的空格和制表符
*/
#include <stdio.h>
char * strtrim(char *s) {
char *p = s;
char *q = s;
while (*p==' ' || *p=='\t') ++p;
while (*q++=*p++)
;
q -= 2;
while (*q==' ' || *q=='\t') --q;
*(q+1) ='\0';
return s;
}
char * strtrim_fast(char *s) {
char *p = s;
char *q = s;
char *end = s;
while (*p==' ' || *p=='\t') ++p;
while (*q = *p) {
if (*q!=' ' && *q!='\t') end = q+1;
++q, ++p;
}
*end = '\0';
return s;
}
int main() {
char s[BUFSIZ] = " abd abc ";
puts(s);
strtrim(s);
puts(s);
}