Challenge: Searching Within Strings
Method find()
Sometimes, you may need to search for specific text within a string. This can be done using the .find() or .rfind() methods. Let’s begin with the .find() method.
find.h
1str.find("text to find")
It returns the index of the first character of the first match.
main.cpp
1234567#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; // (code)codefinity }
You can also specify the position of the first character in the string to be considered in the search. It can be done using the pos argument. Any characters before the pos index are ignored in a search.
Here is an example of finding the first "code" starting from a 3-rd character.
main.cpp
1234567#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code", 3) << std::endl; // __de(code)finity }
Method rfind()
You can also locate the last occurrence of some text using the .rfind() method.
rfind.h
1str.rfind("text to find")
While .find() retrieves the first occurrence of text, .rfind() finds the last occurrence and stands for reverse find.
main.cpp
12345678#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; std::cout << str.rfind("code") << std::endl; }
When .find() or .rfind() cannot locate the substring, they return string::npos. This is a numeric constant that represents an invalid position. It is stored as the largest possible size_t value, which makes it easy to detect failed searches.
main.cpp
12345678#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.rfind("abc") << std::endl; std::cout << std::string::npos << std::endl; }
Swipe to start coding
You are building a simple email filter. Your goal is to allow users to register with any email and mark emails from codefinity.com as allowed.
The function isAllowedEmail takes an email as string.
- Use
rfind()to find the last'@'symbol in the email. - Compare the result of
rfindwith-1to check if the'@'symbol exists. If no'@'is found, returnfalsebecause the email is invalid. - Initialize a string variable
domainas an empty string. - Use a
forloop starting fromatPos + 1up to the length ofemailto iterate over characters after the'@'. - In each iteration, append the character to the
domainvariable. - If
domainequals"codefinity.com", returntrue. Otherwise, returnfalse.
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
What is the difference between .find() and .rfind()?
Can you show an example of using the pos argument with .find()?
How does .find() behave if the substring is not found?
Fantastisk!
Completion rate forbedret til 4.35
Challenge: Searching Within Strings
Sveip for å vise menyen
Method find()
Sometimes, you may need to search for specific text within a string. This can be done using the .find() or .rfind() methods. Let’s begin with the .find() method.
find.h
1str.find("text to find")
It returns the index of the first character of the first match.
main.cpp
1234567#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; // (code)codefinity }
You can also specify the position of the first character in the string to be considered in the search. It can be done using the pos argument. Any characters before the pos index are ignored in a search.
Here is an example of finding the first "code" starting from a 3-rd character.
main.cpp
1234567#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code", 3) << std::endl; // __de(code)finity }
Method rfind()
You can also locate the last occurrence of some text using the .rfind() method.
rfind.h
1str.rfind("text to find")
While .find() retrieves the first occurrence of text, .rfind() finds the last occurrence and stands for reverse find.
main.cpp
12345678#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; std::cout << str.rfind("code") << std::endl; }
When .find() or .rfind() cannot locate the substring, they return string::npos. This is a numeric constant that represents an invalid position. It is stored as the largest possible size_t value, which makes it easy to detect failed searches.
main.cpp
12345678#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.rfind("abc") << std::endl; std::cout << std::string::npos << std::endl; }
Swipe to start coding
You are building a simple email filter. Your goal is to allow users to register with any email and mark emails from codefinity.com as allowed.
The function isAllowedEmail takes an email as string.
- Use
rfind()to find the last'@'symbol in the email. - Compare the result of
rfindwith-1to check if the'@'symbol exists. If no'@'is found, returnfalsebecause the email is invalid. - Initialize a string variable
domainas an empty string. - Use a
forloop starting fromatPos + 1up to the length ofemailto iterate over characters after the'@'. - In each iteration, append the character to the
domainvariable. - If
domainequals"codefinity.com", returntrue. Otherwise, returnfalse.
Løsning
Takk for tilbakemeldingene dine!
single