函數(shù)名: strtok
頭文件:<string.h>
函數(shù)原型: char *strtok(char *str1, const char *str2);
功能: 用指定的分隔符分解字符串
參數(shù): char *str1 為要分解的字符串
const char *str2 為分隔符字符串
返回值: 返回下一個分割后的字符串指針,如果已無從分隔,則返回NULL
注意: 1、函數(shù)的作用是分解字符串,所謂分解,即沒有生成新串,只是在s所指向的內(nèi)容首次出現(xiàn)分界符的位置,將分界符修改成了'/0’,故第一次用strtok()返回第一個子串
2、第一次提取子串完畢之后,繼續(xù)對源字符串s進(jìn)行提取,應(yīng)在其后(第二次,第三次。。。第n次)的調(diào)用中將strtok的第一個參數(shù)賦為空值NULL(表示函數(shù)繼續(xù)從上 一次調(diào)用隱式保存的位置,繼續(xù)分解字符串;對于前一次次調(diào)用來說,第一次調(diào)用結(jié)束前用一個this指針指向了分界符的下一位)
3、當(dāng)this指針指向“\0” 時,即沒有被分割的子串了,此時則返回NULL
4、可以把delim理解為分隔符的集合,delim中的字符均可以作為分隔符。
5、strtok在調(diào)用的時候,如果起始位置即為分隔符,則忽略了起始位置開始的分隔符
6、該函數(shù)會改變str1的值,所以str1必須是字符串?dāng)?shù)組,不能是字符串指針
程序例: 將字符串?dāng)?shù)組input通過分隔符","分隔開,并將結(jié)果輸出
#include<string.h> #include<stdio.h> int main(void){ char input[50] = "I like www.sztianhecheng.cn very much"; char *p = strtok(input, " "); if(p){ printf("%s\n", p); } while(p=strtok(NULL, " ")){//使用第一個參數(shù)為NULL來提取子串 printf("%s\n", p); } return 0; }
運行結(jié)果:
I like www.sztianhecheng.cn very much
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程