字串分割函式strtok 會改變原字串

2021-08-28 23:10:46 字數 1412 閱讀 3351

標頭檔案:#include

函式原型:char *strtok(char *str, const char *delimiters);

函式功能:分割字串,將str分割成乙個個子串

函式引數:

str: 在第一次被呼叫的時候str傳入需要被分割字串的首位址;在後面呼叫的時候傳入null。

delimiters: 表示分割字串中包含的所有字元。

函式返回值:

當s中的字元查詢到末尾時,返回null;

如果查不到delimiters所標示的字元,則返回當前strtok的字串的指標。

需要注意的是:使用該函式進行字串分割時,會破壞並分解字串的完整,呼叫前和呼叫後的str已經不一樣了。strtok在切割字串的時候,實際上就是將分割符的字元delimiter替換為'\0'並且返回首位址。這點在下面會有例子說明。

(1)將字串通過'@'分割開:

#include using namespace std;

int main()

return 0;

}

執行結果:

i am

a great

young man

!(2)下面我們來觀察一下呼叫strtok()函式之後的str會是什麼樣的:

#include using namespace std;

int main()

for (int i = 0; i < sizeof(str); i++)

cout << str[i];

return 0;

}

我們發現呼叫完strtok函式後再輸出的完整的str是:

@i am a great young man !

例一總結:strtok在分割字串的過程,實際上就是將被分割的字串的分割字元替換為'\0' 並且返回標記字串的首位址,直到返回null結束。呼叫完strtok後,如果只是直接輸出str,而不是像上面一樣將所有的字元都輸出,則輸出的是@i am。但需要注意的是,此處有點特殊,因為有乙個分割符在字串首位,所以第乙個@沒被替換,後面的@全部被替換;但如果第一位不是分割字元,則後面的分割符也是全部被替換為'\0',而不是第乙個分割符不被替換。

將字串通過'@'和'!'分割開:

#include using namespace std;

int main()

return 0;

}

可以看出,只需要將分割字元全部放到乙個字串裡即可,如"@!"。

參考:

分割字串 strtok 函式

在這個競爭的社會,對手無處不在,相信好勝心或者自尊心每個人都有,別人想要時時刻刻處處都要超越你,面對競爭對手或許它會採取各種手段來對付你,不要不相信,這種無恥的人是有的,那麼對待它們首先要做到的一點就是忍,暴力是衝動的不明智的選擇,它只會使你滿足一瞬間的慾望,卻會給自己帶來無窮的傷害,甚至會毀掉自己...

字串分割函式strtok

分解字串為一組字串。s為要分解的字串,delim為分隔符字串。例如 strtok abc,def,ghi 最後可以分割成為abc def ghi.尤其在點分十進位制的ip中提取應用較多。strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串中包含的所有字元。當s...

分割字串函式strtok

char strtok char s,const char delim 作用 分解字串為一組字串。s為要分解的字串,delim為分隔符字串。說明 strtok 用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串,當strtok 在引數s的字串中發現到引數delim的分割字...