How can I search only a single character while the search is a wide string in my C++ app? What kind of methods I can use to find a character in a std::wstring? How can I use find_first_of(), find_last_of() methods with wstrings?
Modern C++ uses Wide Strings and Unicode Strings to support worldwide languages. Wide Strings (std::wstring) uses wcha_tr as the character type which means they are 2-bytes chars and they are an instantiation of the basic_string class template. In C++, there are several type definitions for common character types and one of them is std::wstring types that are defined in header <string>.
wstrings are the string class for 2-bytes characters represented with wstring and alphanumeric characters are stored and displayed in wide string forms. In other terms, wstring stores for the alphanumeric text with 2-byte chars, called wchar_t. Wide Strings are the instantiation of the basic_string class template that uses wchar_t as the character type. In modern C++, simply we can define a wide string with L” ” literal as below,
1 2 3 |
std::wstring wstr = L"This is a Wide String"; |
Wide Strings (wstring) are a class contains arrays of wide characters with useful methods, and we can access, or modify their characters easily. Note that, In C++, while wide string contents are defined between L” and “ with literal L, wide characters are defined between L’ and ‘ with literal L
The wstring has methods to append, assign, copy, align, replace or operate with other wide strings. These methods can be used in all string methods with their appropriate syntax.We can find characters in a string by using find_first_of() and find_last_of() methods.
What if my strings are not Wide strings in my C++ app?
We discussed the find_first_of and find_last_of methods for std:string in the following article.
How to search a Wide string with the find_first_of() method in a C++ app
The find_first_of() Method is a String Method that finds the first character of a wide string (a character sequence) in another wide string. In this method, it searches only a single character while the search is a string. If the character is not present in a wstring it returns the npos of the wstring (std::string::npos).
Simply we can find a character of a wide string in another wide string by using its find_first_of() method as given syntax.
Syntax:
1 2 3 |
size_type find_first_of( const basic_string& str) const; |
Here we can find a character of a wide string in another wide string by using its find_first_of() method as given full example below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <string> int main() { std::wstring wstr = L"LearnCPlusPlus.org"; int pos = wstr.find_first_of(L"r"); // find the first character 'r' from a wstring if( pos != std::wstring::npos ) { std::wcout << L"The First Character found at " << pos << std::endl; } else { std::wcout << L"The First Charcater not found" << std::endl; } getchar(); return 0; } |
Output of this code will be as below,
1 2 3 |
The First Character found at 3 |
As you see here, we find the first ‘r’ character in our wide string at the position 3
How to search a Wide String with the find_last_of() method in a C++ app
The find_last_of() Method is a String Method that finds the last character of a wide string (a character sequence) in another wide string. In this method, it searches only a single character while the search is a wide string. If the character is not present in a wide string it returns the npos of the wide string (std::wstring::npos).
Simply we can find a character of a wstring in another wstring by using its find_last_of() method as given syntax.
Syntax:
1 2 3 |
size_type find_last_of( const basic_string& str, size_type position) const; |
Here we can find a character of a wstring in another wstring by using its find_last_of() method as given full example below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <string> int main() { std::wstring wstr = L"LearnCPlusPlus.org"; int pos = wstr.find_last_of(L"r"); // find the last character 'r' from from a wstring if( pos != std::wstring::npos ) { std::wcout << L"The Last Character found at " << pos << std::endl; } else { std::wcout << L"The Last Charcater not found" << std::endl; } getchar(); return 0; } |
Output of this code will be as below,
1 2 3 |
The Last Character found at 16 |
as you see we found the last ‘r’ character which is in “.org” part at the position 16.