npos [C++ Reference]
Keywords: string,npos
Date: 2009-10-11T12:25:02-0700

## npos

Syntax:

     static const size_type npos = -1;

`string::npos` is a special value that indicates one of the following:

- “not found”, as a return value of `find()`, `find_first_of()`, etc.
- “all remaining characters”, as length of substrings.

Example code:

     #include <set>
     #include <iostream>
     #include <iterator>
     #include <algorithm>
     #include <string>

     int main()
     {
       const std::string text("Vectors contain contiguous elements stored as an array.\n\n"
                              "Accessing members of a vector can be done in constant time, "
                              "appending elements to a vector can be done in amortized constant time, "
                              "whereas locating a specific value "
                              "or inserting elements into the vector takes linear time.");

       const std::string delims(" \t\n.,?!;:\"");

       std::set<std::string> words;
       std::string::size_type end_pos;

       // find beginning of the first word
       std::string::size_type beg_pos = text.find_first_not_of(delims);

       // while beg_pos is not "not found" (i.e. beginning of a word is found)
       while (beg_pos != std::string::npos)
       {
         // find delimiter (end of the word)
         end_pos = text.find_first_of(delims, beg_pos);

         // insert substring into set
         words.insert(text.substr(beg_pos,
                                  end_pos == std::string::npos // if end_pos is "not found"
                                  ? std::string::npos          // then "all remaining characters"
                                  : end_pos - beg_pos));

         // find beginning of the next word
         beg_pos = text.find_first_not_of(delims, end_pos);
       }

       // display words
       std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, "\n"));

       return 0;
     }

Related Topics: find, find_first_not_of, find_first_of, find_last_not_of, find_last_of, rfind, substr