strtok
定義:char *strtok(char s[], const char *delim);
s為要分解的字符串
delim為分隔符字符串
-
當strtok()在參數(shù)s的字符串中發(fā)現(xiàn)參數(shù)delim中包含的分割字符時,則會將該字符改為\0 字符。在第一次調用時,strtok()必需給予參數(shù)s字符串,往后的調用則將參數(shù)s設置成NULL。每次調用成功則返回指向被分割出片段的指針
#include <stdio.h> #include <string.h> void printArr(char *, int); int main() { char s[30] = "abc dedef gdhi de jkl"; const char *delim = "de"; printArr(s, 30); printf("\n"); char *result = strtok(s, delim); while (result) { printf("%s|%s\n", result, s); result = strtok(NULL, delim); } printArr(s, 30); return 0; } void printArr(char *s, int n) { for (int i = 0; i < n; i++) { printf("[%c#%-3d] ", s[i], s[i]); } }結果:
[a#97 ] [b#98 ] [c#99 ] [ #32 ] [d#100] [e#101] [d#100] [e#101] [f#102] [ #32 ] [ #32 ] [g#103] [d#100] [h#104] [i#105] [ #32 ] [ #32 ] [ #32 ] [ #32 ] [d#100] [e#101] [ #32 ] [ #32 ] [ #32 ] [ #32 ] [j#106] [k#107] [l#108] [ #0 ] [ #0 ] abc |abc f g|abc hi |abc jkl|abc [a#97 ] [b#98 ] [c#99 ] [ #32 ] [ #0 ] [e#101] [d#100] [e#101] [f#102] [ #32 ] [ #32 ] [g#103] [ #0 ] [h#104] [i#105] [ #32 ] [ #32 ] [ #32 ] [ #32 ] [ #0 ] [e#101] [ #32 ] [ #32 ] [ #32 ] [ #32 ] [j#106] [k#107] [l#108] [ #0 ] [ #0 ]

4.png
注意:
- 分割的字符串不能為常量
- 第一次調用需要傳入需要分割的字符串,后面就傳入NULL。
- 如果未找到分割的字符串,則范圍當前字符串的指針
- 所有出現(xiàn)分割字符串的地方都會被過濾, 如上面代碼 dede
- strtok會破壞被分解的字符串,調用前后不一致。我們看到運行結果,所有出現(xiàn)de的地方,第一個字符被替換成了'\0'。
strchr
定義:char strchr(const char _Str,char _Val)
回首次出現(xiàn)_Val的位置的指針,返回的地址是被查找字符串指針開始的第一個與Val相同字符的指針,如果Str中不存在Val則返回NULL。
-
返回值:成功則返回要查找字符第一次出現(xiàn)的位置,失敗返回NULL
int main() { char s[30] = "abc dedef gdhi de jkl"; char *result = strchr(s, 'd'); printf("%s\n", result); return 0; }結果:
dedef gdhi de jkl
strstr
- 定義:char *strstr (const char *, const char *)
- 判斷字符串str2是否是str1的子串。如果是,則該函數(shù)返回str2在str1中首次出現(xiàn)的地址;否則,返回NULL