定义于头文件 <cstring>
char* strtok( char* str, const char* delim );
寻找 str 所指向的空终止字节字符串中的下个记号。由 delim 所指向的空终止字节字符串鉴别分隔字符。
此函数被设计为调用多次,以从同一字符串获得相继的记号。
1. 若 str 不是空指针,则调用被当做 strtok 对此特定字符串的首次调用。函数搜索首个不含于 delim 的字符。
1.1 若找不到这种字符,则 str 中完全没有记号,而函数返回空指针。
1.2 若找到这种字符,则它是记号的起始。然后函数从 delim 所含的首个字符的该点搜索。
1.21 若找不到这种字符,则 str 只有一个记号,而将来对 strtok 的调用将返回空指针
1.22 若找到这种字符,则用空字符 '\0' 替换它,并将指向下个字符的指针存储于静态位置,以为后继调用所用。
1.3 然后函数返回指向记号起始的指针
2. 若 str 为空指针,则将调用当做对 strtok 的后继调用,函数从先前调用中它剩下的位置开始。行为如同将先前存储的指针作为 str 传递。
参数
str - 指向要记号化的空终止字节字符串的指针
delim - 指向标识分隔符的空终止字节字符串的指针
返回值
指向下个记号起始的指针,或若无更多记号则为空指针。
注解
此函数是破坏性的(会修改原始字符串,如果不希望这样,可以先复制一份):它写入 '\0' 字符于字符串 str 的元素。特别是,字符串字面量不能用作 strtok 的首参数。
每次对 strtok 的调用都会修改静态对象:它不是线程安全的。
不同于大多数其他记号化器, strtok 中的分隔符能对于后继记号不同,而且甚至能依赖于先前记号的内容。
示例1:
#include <cstring>
#include <iostream>
int main()
{
char input[100] = "A bird came down the walk";
char *token = std::strtok(input, " ");
while (token != NULL) {
std::cout << token << '\n';
token = std::strtok(NULL, " ");
}
}
输出:
A
bird
came
down
the
walk
示例2:(对于字符串"zrftp154:ACkRqhx7",分别取出zrftp154和ACkRqhx7)
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "zrftp154:ACkRqhx7";
char *username;
char *password;
// 使用strtok分割字符串
username = strtok(str, ":");
password = strtok(NULL, ":");
if (username != NULL && password != NULL) {
printf("Username: %s\n", username);
printf("Password: %s\n", password);
} else {
printf("Invalid format!\n");
}
return 0;
}
浙公网安备 33010602011771号