What is string::npos?
- It is a constant static member value with the highest possible value for an element of type size_t.
- It actually means until the end of the string.
- It is used as the value for a length parameter in the string’s member functions.
- As a return value, it is usually used to indicate no matches.
Syntax:
static const size_t npos = -1;
Where npos is a constant static value with the highest possible value for an element of type size_t and it is defined with -1.
Note: std::string::npos is a constant that holds the largest possible value of size_t type ( 18446744073709551615 on 64-bit systems ), which is an unsigned integer type. Hence, -1 corresponds to the actual value of std::string::npos.
Program 1: Below is the C++ program to illustrate the use of string::npos.
C++
// C++ program to demonstrate the use // of string::npos #include <bits/stdc++.h> using namespace std; // Function that using string::npos // to find the index of the occurrence // of any string in the given string void fun(string s1, string s2) { // Find position of string s2 int found = s1.find(s2); // Check if position is -1 or not if (found != string::npos) { cout << "first " << s2 << " found at: " << (found) << endl; } else cout << s2 << " is not in" << "the string" << endl; } // Driver Code int main() { // Given strings string s1 = "neveropen" ; string s2 = "for" ; string s3 = "no" ; // Function Call fun(s1, s2); return 0; } |
first for found at: 5
Explanation: In the above program string::npos constant is defined with a value of -1, because size_t is an unsigned integral type, and -1 is the largest possible representable value for this type.
What if the valid position for a substring is not found in a string?
Various member functions of the String class return the default value of std::string::npos if a valid position or index for a substring is not found in the string.
Below are the String Functions that return the value of std::string::npos in the case of failure:
- find()
- rfind()
- find_first_of()
- find_last_of()
- substr()
- erase()
Program 2: C++ Program to Illustrate that Some String Functions return the value of std::string::npos in case of failure.
C++
#include <iostream> using namespace std; int main() { std::string str = "Hello, world!" ; // Returns std::string::npos because "abc" is not found. size_t position = str.find( "abc" ); if (position == std::string::npos) cout << "Substring not found" ; else cout << position; return 0; } |
Substring not found
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!