Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::strtok

      From cppreference.com
      <cpp‎ |string‎ |byte
       
       
       
       
      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 :

      • Ifstr is non-null, the call is thefirst call in the sequence. The search target is null-terminated byte string pointed to bystr.
      • Ifstr is null, the call is one of thesubsequent calls in the sequence. The search target is determined by the previous call in the sequence.

      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.

      • If no such character is found, then there are no tokens in the search target. The search target for the next call in the sequence is unchanged.[1]
      • If such a character is found, it is the start of the current token.std::strtok then searches from there for the first character that is contained in the separator string.
        • If no such character is found, the current token extends to the end of search target. The search target for the next call in the sequence is an empty string.[2]
        • If such a character is found, it is overwritten by a null character, which terminates the current token. The search target for the next call in the sequence starts from the following character.

      Ifstr ordelim is not a pointer to a null-terminated byte string, the behavior is undefined.

      1. A token may still be formed in a subsequent call with a different separator string.
      2. No more tokens can be formed in subsequent calls.

      Contents

      [edit]Parameters

      str - pointer to the null-terminated byte string to tokenize
      delim - pointer to the null-terminated byte string identifying delimiters

      [edit]Return value

      Returns a pointer to the first character of the next token, or a null pointer if there is no token.

      [edit]Notes

      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.

      [edit]Possible implementation

      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).

      [edit]Example

      Run this code
      #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"

      [edit]See also

      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
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/string/byte/strtok&oldid=180870"

      [8]ページ先頭

      ©2009-2025 Movatter.jp