当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ strtok()用法及代码示例


在本教程中,我们将借助示例了解 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

  • 此调用被视为使用 strstrtok() 的后续调用。
  • 该函数从它在上次调用中离开的位置继续。

示例 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 分成标记。
  • 第一次调用该函数时,我们需要传递quotestring 指定它是源字符串参数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++ strtok()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。