C++中strtok()函式的實現


strtok() 函式是 C++ 中最常用的函式之一。此函式可以使用分隔符作為指導,將文字分割成較小的塊或標記。藉助 strtok() 函式,在 C++ 中處理字串變得簡單。本文將對 strtok() 函式進行全面探討,包括其定義、語法、演算法和各種實現方法。務必記住,strtok 函式有一些限制和潛在缺點。例如,它不能用於 const 或只讀字串,因為它會就地修改原始字串。邊緣情況和意外輸入(例如空字串或序列中重複出現的分隔符)也可能難以處理。

儘管存在這些缺點,但此函式對於許多程式設計師來說仍然是一個有用的工具,並且經常用於各種應用程式中,包括文字處理、資料解析和網路協議。它是一個靈活而強大的函式,可以極大地簡化許多常規的程式設計任務。

strtok() 函式的特性

在 C++ 中,使用 strtok() 函式可以根據分隔符將字串分割成較小的塊或標記。該函式的兩個輸入是必須被標記化的字串的指標和包含分隔符字元的字串。該函式返回指向字串第一個標記的指標。只要字串中還有剩餘的標記,使用相同字串引數對函式的後續呼叫將返回附加的標記,這在 while 迴圈中藉助 NULL 指標實現。再次呼叫 'strtok()' 函式時,提供 NULL 作為第一個引數會指示函式從上次對同一字串進行標記化的地方繼續。

當第一次使用輸入字串作為第一個引數呼叫函式 'strtok()' 時,它會從字串開頭開始查詢第一個標記。當它找到第一個標記時,它會透過用空字元 ('\0') 替換其後的分隔符來終止它。當再次使用 NULL 指標作為第一個引數使用 'strtok()' 時,該函式會從上次對字串進行標記化的地方繼續,即緊跟在先前標記之後。它繼續查詢分隔符的下一個出現。

語法

Char* strtok(char* str, const char* delimiters);  

其中

- `str` 是要標記化的字串的指標。

- `delimiters` 是包含分隔符字元的字串。

演算法

  • 步驟 1 − `strtok()` 函式接受兩個引數 - 第一個引數是要標記化的輸入字串,第二個引數是包含所有應用於將輸入字串分割成標記的分隔符的字串。

  • 步驟 2 − 首次呼叫該函式時,輸入字串作為第一個引數傳遞,分隔符字串作為第二個引數傳遞。

  • 步驟 3 − 該函式搜尋輸入字串中任何分隔符字元的第一次出現。

  • 步驟 4 − 當它找到一個分隔符字元時,它會用空終止符 ('\0') 替換它,並返回指向第一個標記開頭的指標。

  • 步驟 5 − 下次呼叫該函式時,第一個引數應設定為 `NULL`,而不是原始輸入字串。這告訴函式從中斷的地方繼續,並在字串中搜索下一個標記。

  • 步驟 6 − 該函式繼續搜尋分隔符字元,並返回指向後續標記開頭的指標,直到到達字串的末尾,此時它返回 `NULL`。

遵循的方法

方法 1 − 使用迴圈和 strtok() 函式以及單個分隔符的程式程式碼。

方法 2 − 使用迴圈和 strtok() 函式以及多個分隔符的程式程式碼。

方法 1

以下是使用迴圈和 strtok() 函式以及單個分隔符的程式程式碼示例。

此示例演示如何使用 strtok 透過空格標記化字串。首先將輸入字串 str 與分隔符“ ”一起傳遞給 strtok。對 strtok 的第一次呼叫返回指向第一個標記 (“Hi,”) 的指標,該指標被列印到控制檯。strtok 繼續標記化字串,直到沒有更多標記,並且每個標記都列印到控制檯。請注意,對於 strtok 的後續呼叫,我們將空指標作為第一個引數傳遞,這表示我們想要繼續標記化原始字串。

示例 1

#include <iostream>
#include <cstring> // Include the header for strtok()
using namespace std;

int main() {
   char str[] = "Hi, this topic tells about strtok() function";
   char* ptr;
   ptr = strtok(str, " ");
   while (ptr != NULL) {
      cout << ptr << endl;
      ptr = strtok(NULL, " ");
   }
   return 0;
}

輸出

Hi, 
this  
topic 
tells  
about 
strtok()  
function 

方法 2

以下是使用迴圈和 strtok() 函式以及多個分隔符的程式程式碼示例。

在此示例中,使用 '|' 和 ' '(空格)分隔符來標記化字串“The boy|is|standing|with his pet|lazy dog.”。strtok() 方法被呼叫兩次,一次使用字串作為第一個引數,字元 '|' 和 ' ' 作為第二個引數。初始呼叫返回第一個標記“The”。迴圈繼續執行,直到所有標記都被提取。

示例 2

#include <iostream> 
#include <cstring> 
 
int main() { 
   char str[] = "The boy|is|standing|with his pet|lazy dog."; 
   char* token = strtok(str, "| "); 
   while (token != NULL) { 
      std::cout << token << std::endl; 
      token = strtok(NULL, "| "); 
   } 
   return 0; 
} 

輸出

The 
boy 
is 
standing 
with 
his 
pet 
lazy 
dog.

結論

總之,C++ strtok 函式是用於操作字串的有用且有效的工具。儘管它有明顯的限制和潛在缺點,但它仍然是解析和處理文字資料的常用選擇,並且對於任何程式設計師來說都是一個有用的工具。

更新於:2023年7月21日

427 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.