How can I use substr() method of std::wstring? How can I get a substring of a string in a C++ app? Here are the answers with C++ examples.
Generally, as an introduction to C++, in addition to int, float, double there is another data type called string that we use for alphanumeric variables. In C++ there are several typedefs for common character types are provided: String types are defined in header <string>.
Strings are the string class for byte characters represented with string and alphanumeric characters are stored and displayed in string forms. In other words, string stores the alphanumeric text with 1-byte chars, called ASCII chars. Strings are the instantiation of the basic_string class template that uses char as the character type. Simply we can define a string as below,
1 2 3 |
std::string str = "This is a String"; |
string has methods to assign, copy, align, replace or to operate with other strings. These methods can be used in all string methods with their appropriate syntax. We can retrieve a substring of a string by using substr() method. Let’s see this method.
How do I get a substring of a string with the substr() method in C++?
The substr() method of std::string, can be used to retrieve a substring of a string. As its parameters, you just need to indicate where to start to retrieve chars (start_position) and the count of chars (char_count). Here is syntax of a substr() method,
1 2 3 |
basic_string substr( size_type start_position, size_type char_count) const; |
Here is a example how we can use substr() method with in this given syntax, see example below,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <string> int main() { std::string s1, s2; s1 = "my first string"; s2 = s1.substr(3,5); // copy substring of s1 from 3 to 3+5 to the string s2 std::cout << "String: '" << s1 << "'\n"; std::cout << "Sub String: '" << s2 << "'\n"; getchar(); return 0; } |
and the output will be,
1 2 3 4 |
String: 'my first string' Sub String: 'first' |
Why do I get “Out of Range” when retrieving a substring of a string?
As given in this method we can directly copy, assign, replace or insert any substring of a string. When we use substr() method, we must be sure that the first parameter is lower than its size (s1.size()) and the second parameter is lower than size()-first_parameter, which means both should be inside the string. If second parameter exceeds the string size, it returns substring of string till the end of string without throwing an exception.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <iostream> #include <string> int main() { std::string s1, s2; s1 = "my first string"; int start_pos = 3; try { std::string s2 = s1.substr( start_pos, 32); std::cout << "String: '" << s1 << "'\n"; std::cout << "Sub String: '" << s2 << "'\n"; } catch(const std::out_of_range& e) { std::cout << "out of range in substring, please check string size\n"; } getchar(); return 0; } |
for the start_pos=3 the output will be,
1 2 3 4 |
String: 'my first string' Sub String: 'first string' |
in this example above, If the first parameter start_pos is equal to string size it will return empty string, for example for the start_pos=15 the output will be,
1 2 3 4 |
String: 'my first string' Sub String: '' |
and in this example above, if the first parameter exceeds the size of string there will be out_of_range throw, for example for the start_pos=16 the output will be,
1 2 3 |
out of range in substring, please check string size |
If you are checking range carefully you don’t need to use try-catch()
method. You can also check these parameters by using its size(). As you see substr() is very easy to use to retrieve any substring of a string, and this substr() method can be used with wstrings as shown in the examples above.