strtok()函數用於基於定界符標記字符串。它存在於頭文件“string.h”中,如果存在則返回指向下一個標記的指針,如果不存在下一個標記,則返回NULL。為了獲得所有令牌,其想法是循環調用此函數。
頭文件:
#include <string.h>
用法:
char *strtok(char *s1, const char *s2);
在本文中,我們將討論此函數的實現,其中必須考慮兩點:
- 維護字符串的狀態,以確保我們已經提取了多少個令牌。
- 其次,維護數組中提取的令牌列表以將其返回。
腳步:
- 創建一個函數strtok(),該函數接受字符串和定界符作為參數並返回char指針。
- 創建靜態變量輸入以維護字符串的狀態。
- 檢查是否是第一次提取令牌,然後使用它初始化輸入。
- 如果輸入為NULL並且提取了所有標記,則返回NULL。
- 在此步驟中,開始提取令牌並將其存儲在數組result []中。
- 現在,迭代循環直到出現NULL或定界符,然後通過包含'\ 0'返回結果。
- 到達字符串的末尾時(如果需要),請手動添加“ \ 0”,並在末尾添加此小寫字母。
下麵是相同的實現:
C++
// C++ program to demonstrate the function
// strtok() to tokenized the string
#include <bits/stdc++.h>
using namespace std;
char* mystrtok(char* s, char d)
{
// Stores the state of string
static char* input = NULL;
// Initialize the input string
if (s != NULL)
input = s;
// Case for final token
if (input == NULL)
return NULL;
// Stores the extracted string
char* result = new char[strlen(input) + 1];
int i = 0;
// Start extracting string and
// store it in array
for (; input[i] != '\0'; i++) {
// If delimeter is not reached
// then add the current character
// to result[i]
if (input[i] != d)
result[i] = input[i];
// Else store the string formed
else {
result[i] = '\0';
input = input + i + 1;
return result;
}
}
// Case when loop ends
result[i] = '\0';
input = NULL;
// Return the resultant pointer
// to the string
return result;
}
// Driver Code
int main()
{
// Given string str
char str[90] = "It, is my, day";
// Tokenized the first string
char* ptr = mystrtok(str, ' ');
// Print current tokenized string
cout << ptr << endl;
// While ptr is not NULL
while (ptr != NULL) {
// Tokenize the string
ptr = mystrtok(NULL, ' ');
// Print the string
cout << ptr << endl;
}
return 0;
}
輸出:
It, is my, day
相關用法
注:本文由純淨天空篩選整理自NANDINIJAIN大神的英文原創作品 Implementing of strtok() function in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。