題目:實現 void _c_split(const char* _src, const char* _delimiter, char** _dest),將字符串按分隔符分割,結果存入 _dest 數組(以 NULL 結尾)。
void _c_split(const char* _src, const char* _delimiter, char** _dest) {
assert(_src && _delimiter && _dest);
int srcLen = strlen(_src), deLen = strlen(_delimiter);
if (srcLen == 0 || deLen == 0) return;
char* start = (char*)_src;
char* end;
while (1) {
end = strstr(start, _delimiter);
if (end) {
*end = '\0'; // 覆蓋分隔符為結束符
*_dest++ = start; // 記錄子串起始
end += deLen; // 跳過分隔符
start = end;
} else {
*_dest = start; // 最後一段
break;
}
}
}
\0,避免額外拷貝,**要求 _src 可寫**(不可傳字符串字面量)。char *parts[100])。deLen 支持任意長度分隔符。char str[] = "abc$rr$asdsakk$"; // 可修改數組
char *parts[20];
_c_split(str, "$", parts);
for (int i = 0; parts[i]; ++i)
printf("part[%d]=%s\n", i, parts[i]);
// 輸出:abc, rr, asdsakk, (空串)
char** 需調用者釋放。regex.h。此題考察指針操作、字符串處理、內存所有權與邊界條件,是系統編程基本功的綜合體現。