標準庫無 trim,需自行實現:去除字符串中所有出現在 seps 集合中的字符。
#include#include char seps[] = " "; // 要去除的字符集合 char* trim(char *dest, const char *src, const char *seps) { char *token = strtok((char*)src, seps); // 注意:strtok 會修改源串 *dest = '\0'; while (token) { strcat(dest, token); token = strtok(NULL, seps); } return dest; } int main() { char result[1024]; char str[] = "ab c d e f"; printf("原串: %s\n", str); trim(result, str, seps); printf("結果: %s\n", result); // abcdef return 0; }
strtok **會破壞源字符串**(插入 '\0'),傳入副本或可修改緩衝區strtok 非線程安全(內部靜態狀態),多線程用 strtok_rchar* trim_inplace(char *str, const char *seps) {
char *read = str, *write = str;
while (*read) {
if (!strchr(seps, *read))
*write++ = *read;
read++;
}
*write = '\0';
return str;
}
優點:不破壞源串結構(僅縮短)、線程安全、單遍歷 O(N)、原地操作 O(1) 空間。