Localization library | |||||||||||||||||||||||||
Regular expressions library(C++11) | |||||||||||||||||||||||||
Formatting library(C++20) | |||||||||||||||||||||||||
Null-terminated sequence utilities | |||||||||||||||||||||||||
Byte strings | |||||||||||||||||||||||||
Multibyte strings | |||||||||||||||||||||||||
Wide strings | |||||||||||||||||||||||||
Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Text encoding identifications | |||||||||||||||||||||||||
|
Functions | ||||||||||||||||||||||||||||||||||||
Character classification | ||||||||||||||||||||||||||||||||||||
Character manipulation | ||||||||||||||||||||||||||||||||||||
Conversions to numeric formats | ||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||
String manipulation | ||||||||||||||||||||||||||||||||||||
String examination | ||||||||||||||||||||||||||||||||||||
Character array functions | ||||||||||||||||||||||||||||||||||||
Miscellaneous | ||||||||||||||||||||||||||||||||||||
Defined in header <cstring> | ||
char* strtok(char* str,constchar* delim); | ||
Tokenizes a null-terminated byte string.
A sequence of calls tostd::strtok
breaks the string pointed to bystr into a sequence of tokens, each of which is delimited by a character from the string pointed to bydelim. Each call in the sequence has asearch target :
Each call in the sequence searches the search target for the first character that isnot contained in theseparator string pointed to bydelim, the separator string can be different from call to call.
std::strtok
then searches from there for the first character that is contained in the separator string.Ifstr ordelim is not a pointer to a null-terminated byte string, the behavior is undefined.
Contents |
str | - | pointer to the null-terminated byte string to tokenize |
delim | - | pointer to the null-terminated byte string identifying delimiters |
Returns a pointer to the first character of the next token, or a null pointer if there is no token.
This function is destructive: it writes the'\0' characters in the elements of the stringstr. In particular, astring literal cannot be used as the first argument ofstd::strtok
.
Each call to this function modifies a static variable: is not thread safe.
Unlike most other tokenizers, the delimiters instd::strtok
can be different for each subsequent token, and can even depend on the contents of the previous tokens.
char* strtok(char* str,constchar* delim){staticchar* buffer; if(str!= nullptr) buffer= str; buffer+=std::strspn(buffer, delim); if(*buffer=='\0')return nullptr; char*const tokenBegin= buffer; buffer+=std::strcspn(buffer, delim); if(*buffer!='\0')*buffer++='\0'; return tokenBegin;} |
Actual C++ library implementations of this function delegate to the C library, where it may be implemented directly (as inMUSL libc), or in terms of its reentrant version (as inGNU libc).
#include <cstring>#include <iomanip>#include <iostream> int main(){char input[]="one + two * (three - four)!";constchar* delimiters="! +- (*)";char* token= std::strtok(input, delimiters);while(token){std::cout<<std::quoted(token)<<' '; token= std::strtok(nullptr, delimiters);} std::cout<<"\nContents of the input string now:\n\"";for(std::size_t n=0; n< sizeof input;++n){if(constchar c= input[n]; c!='\0')std::cout<< c;elsestd::cout<<"\\0";}std::cout<<"\"\n";}
Output:
"one" "two" "three" "four" Contents of the input string now:"one\0+ two\0* (three\0- four\0!\0"
finds the first location of any character from a set of separators (function)[edit] | |
returns the length of the maximum initial segment that consists of only the characters not found in another byte string (function)[edit] | |
returns the length of the maximum initial segment that consists of only the characters found in another byte string (function)[edit] | |
aview over the subranges obtained from splitting anotherview using a delimiter(class template)(range adaptor object)[edit] | |
C documentation forstrtok |