虽然有两个循环,但是最多只遍历一次,时间复杂度为O(n),甚至更小。
void xz_trim(char *str, char c) {
size_t const len = strlen(str);
// 去尾
for (NSInteger i = len - 1; i >= 0; i--) {
if (str[i] == c) {
str[i] = '\0';
} else {
break;
}
}
// 去头
for (size_t i = 0, first = 0; i < len; i++) {
if (first == 0) {
if (str[i] == c) {
str[i] = '\0';
} else {
if (i == 0) {
break;
}
first = i;
str[0] = str[i];
}
} else {
str[i - first] = str[i];
if (str[i] == '\0') {
break;
}
}
}
}
网友评论