當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。