在C語言中,沒有內置的split函數。但是可以通過自定義函數來實現類似的功能。下面是一個示例函數,可以將字符串按照指定的分隔符進行拆分:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** split(const char* str, const char* delimiter, int* count) {
char* copy = strdup(str); // 復制原始字符串
char* token = strtok(copy, delimiter); // 分割第一個子串
char** result = NULL;
int i = 0;
while (token != NULL) {
result = realloc(result, sizeof(char*) * (i + 1)); // 分配空間存儲子串的指針
result[i] = strdup(token); // 復制子串
i++;
token = strtok(NULL, delimiter); // 繼續分割下一個子串
}
free(copy); // 釋放復制的字符串
*count = i; // 子串的數量
return result;
}
int main() {
const char* str = "Hello,World,!";
const char* delimiter = ",";
int count;
char** tokens = split(str, delimiter, &count);
for (int i = 0; i < count; i++) {
printf("%s\n", tokens[i]);
}
// 釋放內存
for (int i = 0; i < count; i++) {
free(tokens[i]);
}
free(tokens);
return 0;
}
以上示例中,split函數可以將字符串按照指定的分隔符(例如逗號)拆分成多個子串,并返回一個字符串指針數組。每個子串是一個獨立的字符串,存儲在動態分配的內存中。函數還接受一個整數指針,用于返回拆分后的子串數量。在示例程序中,將"Hello,World,!"按逗號進行拆分,并輸出拆分后的子串。
需要注意的是,使用完split函數后,需要記得釋放返回的字符串指針數組和每個子串的內存,以避免內存泄漏。