參考:
c++ 字串分割方法 實現split:
使用函式strtok
可實現c
語言環境下的字串分割
cstring:strtok
函式:
char * strtok ( char * str, const char * delimiters );
引數:
功能:分割字串
例程:
#include #include #include int main(int argc, char* argv)
printf("str: %s\n", str);
system("pause");
return 0;
}
結果:
問題1:經過分割後,字串str
不再和原先一致
封裝了乙個函式:
#include #include #include #define in
#define out
typedef struct split splitinfo;
void getsplitstring(in char* str, in char* delim, out splitinfo* splitinfo)
splitinfo* in = (splitinfo*)malloc(sizeof(splitinfo));
strcpy(in->info, next);
in->next = null;
top->next = in;
top = in;
n++;
while (next = strtok(null, delim))
splitinfo->num = n;
}void splitfree(splitinfo* splitinfo)
splitinfo->next = null;
splitinfo->num = 0;
}int main(int argc, char* argv)
splitinfo splitinfo;
splitinfo.next = null;
getsplitstring(str, " ,.-", &splitinfo);
splitinfo* top = &splitinfo;
for (int i = 0; i < splitinfo.num; i++)
splitfree(&splitinfo);
printf("str: %s\n", str);
// ----
char str2 = "hello world";
getsplitstring(str2, "hello world", &splitinfo);
top = &splitinfo;
for (int i = 0; i < splitinfo.num; i++)
splitfree(&splitinfo);
printf("str2: %s\n", str2);
system("pause");
return 0;
}
結果:
問題2:輸入引數str
應該為陣列而非字串?
參考:c語言中strtok函式進行分割字串!
但是在封裝後的函式中輸入字串同樣可以執行,這裡還沒太搞懂字串和陣列的區別,以及實參和形參的轉換,等待以後搞懂
問題3:函式strtok
是非執行緒安全的函式?
在linux
環境下,可以使用函式strtok_r
來代替
strtok(分割字串)
strtok 分割字串 表頭檔案 include 定義函式 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串,當strtok 在引數s的字串中 發現到引數delim的分割字元...
C語言strtok 函式 字串分割
標頭檔案 include 函式定義 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim 則為分割字串,當strtok 在引數s 的字串中發現到引數delim的分割字元時則會將該字元改為 0...
C語言strtok 函式 字串分割
標頭檔案 include 定義函式 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s 指向欲分割的字串,引數delim 則為分割字串,當strtok 在引數s 的字串中發現到引數delim 的分割字元時則會將該字元改為...