std::wcstok
来自 cppreference.com
在头文件 <cwchar> 中定义 |
||
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t ** ptr); |
||
在由 str 指向的以空字符结尾的宽字符串中查找下一个标记。分隔符由由 delim 指向的以空字符结尾的宽字符串标识。
此函数旨在多次调用以从同一个字符串获取连续的标记。
- 如果 str != nullptr,则该调用将被视为对该特定宽字符串的
std::wcstok
的第一次调用。该函数搜索第一个不包含在 delim 中的宽字符。
- 如果未找到这样的宽字符,则 str 中根本没有标记,该函数返回一个空指针。
- 如果找到了这样的宽字符,它就是标记的开头。然后,该函数从该点开始搜索第一个包含在 delim 中的宽字符。
- 如果未找到这样的宽字符,则 str 只有一个标记,将来对
std::wcstok
的调用将返回一个空指针。 - 如果找到了这样的宽字符,则它将被空宽字符 L'\0' 替换,并且解析器状态(通常是指向下一个宽字符的指针)将存储在用户提供的 *ptr 位置中。
- 如果未找到这样的宽字符,则 str 只有一个标记,将来对
- 然后,该函数返回指向标记开头的指针。
- 如果 str == nullptr,则该调用将被视为对
std::wcstok
的后续调用:该函数将从与相同 *ptr 的先前调用中结束的位置继续。行为与将指向最后一个检测到的标记后面的宽字符的指针作为 str 传递时相同。
- 如果 str != nullptr,则该调用将被视为对该特定宽字符串的
内容 |
[编辑] 参数
str | - | 指向要标记的以空字符结尾的宽字符串的指针 |
delim | - | 指向识别分隔符的以空字符结尾的宽字符串的指针 |
ptr | - | 指向类型为 wchar_t* 的对象的指针,wcstok 使用它来存储其内部状态 |
[编辑] 返回值
指向下一个标记的开头或空指针(如果不再有标记)。
[编辑] 注意
此函数具有破坏性:它在字符串 str 的元素中写入 L'\0' 字符。特别是,宽字符串字面量不能用作 std::wcstok
的第一个参数。
与 std::strtok 不同,此函数不会更新静态存储:它将解析器状态存储在用户提供的 *ptr 位置。
与大多数其他标记器不同,std::wcstok
中的分隔符对于每个后续标记可以不同,甚至可以取决于先前标记的内容。
[编辑] 示例
运行此代码
#include <cwchar> #include <iostream> int main() { wchar_t input[100] = L"A bird came down the walk"; wchar_t* buffer; wchar_t* token = std::wcstok(input, L" ", &buffer); while (token) { std::wcout << token << '\n'; token = std::wcstok(nullptr, L" ", &buffer); } }
输出
A bird came down the walk
[编辑] 另请参阅
在字节字符串中查找下一个标记 (函数) | |
C 文档 for wcstok
|