在本教程中,我们将借助示例了解 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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。