命名空间
变体
操作

std::wcstok

来自 cppreference.cn
< cpp‎ | string‎ | wide
在头文件 <cwchar> 中定义
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t ** ptr);

str 指向的以 null 结尾的宽字符串中查找下一个令牌。分隔符由 delim 指向的以 null 结尾的宽字符串标识。

此函数设计为多次调用以从同一字符串中获取连续令牌。
  • 如果 str != nullptr,则此调用被视为对此特定宽字符串的第一次 std::wcstok 调用。函数搜索第一个包含在 delim 中的宽字符。
  • 如果未找到此类宽字符,则 str 中根本没有令牌,函数返回一个空指针。
  • 如果找到了此类宽字符,它就是令牌的开头。然后函数从该点开始搜索第一个包含delim 中的宽字符。
  • 如果未找到此类宽字符,则 str 只有一个令牌,并且对 std::wcstok 的未来调用将返回一个空指针。
  • 如果找到此类宽字符,它将被替换为 null 宽字符 L'\0',并且解析器状态(通常是指向以下宽字符的指针)存储在用户提供的位置 *ptr 中。
  • 然后函数返回指向令牌开头的指针。
  • 如果 str == nullptr,则此调用被视为后续的 std::wcstok 调用:函数从上次调用中相同 *ptr 处继续。其行为与将指向最后一个检测到的令牌后面的宽字符的指针作为 str 传递时的行为相同。

目录

[编辑] 参数

str - 指向要令牌化的以 null 结尾的宽字符串的指针
delim - 指向标识分隔符的以 null 结尾的宽字符串的指针
ptr - 指向类型为 wchar_t* 的对象的指针,wcstok 用它来存储其内部状态

[编辑] 返回值

指向下一个令牌开头的指针,如果没有更多令牌,则为空指针。

[编辑] 注意

此函数是破坏性的:它将 L'\0' 字符写入字符串 str 的元素中。特别是,宽字符串文字不能用作 std::wcstok 的第一个参数。

std::strtok 不同,此函数不更新静态存储:它将解析器状态存储在用户提供的位置。

与大多数其他令牌化器不同,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 文档 用于 wcstok