在本教程中,我們將借助示例了解 C++ strtok() 函數。
C++ 中的strtok()
函數在C-string(空終止字節字符串)中返回下一個標記。
"Tokens" 是由指定字符分隔的較小字符串塊,稱為定界字符。
該函數在cstring 頭文件中定義。
示例
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char quote[] = "Remember me when you look at the moon!";
// break the string when it encounters empty space
char* word = strtok(quote, " ");
cout << word;
return 0;
}
// Output: Remember
strtok() 語法
用法:
strtok(char* str, const char* delim);
簡單來說,
str
- 我們要從中獲取令牌的字符串delim
- 分隔符,即分隔標記的字符
參數:
- str- 指向空終止字節字符串 (C-string) 的指針以進行標記
- delim- 指向包含分隔符的以 null 結尾的字節字符串的指針
返回:
strtok()
函數返回:
- 指向下一個標記的指針(如果有)
NULL
值,如果沒有找到更多令牌
strtok() 原型
cstring 頭文件中定義的strtok()
函數的原型是:
char* strtok(char* str, const char* delim);
多次調用strtok()
strtok()
可以多次調用以從同一字符串中獲取令牌。有兩種情況:
情況 1:str 不為 NULL
- 這是對該字符串的第一次調用
strtok()
。 - 該函數搜索不包含在
delim
中的第一個字符。 - 如果沒有找到這樣的字符,則字符串不包含任何標記。所以一個空指針被退回。
- 如果找到這樣的字符,則函數從那裏搜索出現在
delim
.- 如果沒有找到分隔符,
str
隻有一個標記。 - 如果找到分隔符,則將其替換為
'\0'
,並將指向下一個字符的指針存儲在靜態位置以供後續調用。
- 如果沒有找到分隔符,
- 最後,該函數返回指向標記開頭的指針。
情況 2:str 為 NULL
- 此調用被視為使用
str
對strtok()
的後續調用。 - 該函數從它在上次調用中離開的位置繼續。
示例 1:C++ strtok()
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char quote[] = "Remember me when you look at the moon!";
// break the string when it encounters empty space
// str = quote, delim = " "
char* word = strtok(quote, " ");
cout << "token1 = " << word << endl;
// get the next token i.e. word before second empty space
// NULL indicates we are using the same pointer we used previously i.e. quote
word = strtok(NULL, " ");
cout << "token2 = " << word;
// get the third token
word = strtok(NULL, " ");
cout << "token3 = " << word;
return 0;
}
輸出
token1 = Remember token2 = me token3 = when
在這個節目中,
- 我們已將
quote
C-string 標記為空格" "
作為分隔字符delim
。每次strtok()
遇到空格" "
時,這會將quote
分成標記。
- 第一次調用該函數時,我們需要傳遞
quote
string 指定它是源字符串參數src
.char* word = strtok(quote, " ");
- 所有後續調用
strtok()
函數取NULL
作為src
範圍。此參數指示編譯器使用指向 C-string 的 previously-used 指針(即quote
) 作為源src
.word = strtok(NULL, " ");
示例 2:打印字符串中的所有標記
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char str[] = "Remember me when you look at the moon!";
char delim[] = " ";
cout << "The tokens are:" << endl;
// tokenize str in accordance with delim
char *token = strtok(str,delim);
// loop until strtok() returns NULL
while (token) {
// print token
cout << token << endl;
// take subsequent tokens
token = strtok(NULL,delim);
}
return 0;
}
輸出
The tokens are: Remember me when you look at the moon!
相關用法
- C++ strtod()用法及代碼示例
- C++ strtoimax()用法及代碼示例
- C++ strtoull()用法及代碼示例
- C++ strtoll()用法及代碼示例
- C++ strtoul()用法及代碼示例
- C++ strtoumax()用法及代碼示例
- C++ strtol()用法及代碼示例
- C++ string::length()用法及代碼示例
- C++ strchr()用法及代碼示例
- C++ string::npos用法及代碼示例
- C++ strncat()用法及代碼示例
- C++ strcat()用法及代碼示例
- C++ strstr()用法及代碼示例
- C++ strcat() vs strncat()用法及代碼示例
- C++ strcmp()用法及代碼示例
- C++ strcspn()用法及代碼示例
- C++ strpbrk()用法及代碼示例
- C++ strxfrm()用法及代碼示例
- C++ strspn()用法及代碼示例
- C++ strncmp()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ strtok()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。