C語(yǔ)言中經(jīng)常需要處理JSON字符串,其中分割字符串是比較常見(jiàn)的操作之一。下面介紹一下C語(yǔ)言中分割JSON字符串的方法。
char *strtok(char *str, const char *delim);
strtok函數(shù)是C語(yǔ)言中常用的字符串分割函數(shù)。它的第一個(gè)參數(shù)是需要分割的字符串,第二個(gè)參數(shù)是分割符。函數(shù)會(huì)返回分割出的字符串。下次再調(diào)用該函數(shù)時(shí),第一個(gè)參數(shù)應(yīng)為NULL,函數(shù)會(huì)接著上一次結(jié)束的地方繼續(xù)進(jìn)行分割。
在處理JSON字符串時(shí),我們可以使用strtok函數(shù)將其分割成多個(gè)子字符串。例如:
#include <stdio.h> #include <string.h> int main() { char json[] = "{ \"name\": \"Jack\", \"age\": 20 }"; const char delim[] = "{}\":, "; char *token = strtok(json, delim); while (token != NULL) { printf("%s\n", token); token = strtok(NULL, delim); } return 0; }
上面的代碼將字符串"{ \"name\": \"Jack\", \"age\": 20 }"按照“{}\":, ”分割成了以下子字符串:
_ "name" _ "Jack" _ "age" _ "20" _
其中,空格被忽略掉了。
需要注意的是,strtok函數(shù)會(huì)將原始字符串中的分割符替換為NULL字符。因此,在使用strtok函數(shù)分割完字符串后,原始字符串內(nèi)容會(huì)發(fā)生改變。
除了使用strtok函數(shù),還有一些其他的分割字符串的方法。例如可以使用strstr函數(shù)查找分割符,再使用memcpy函數(shù)復(fù)制分割出的子字符串。這里不再贅述。