セクション 3. 章 6
single
チャレンジ:文字列内の検索
メニューを表示するにはスワイプしてください
find() メソッド
特定のテキストを string 内で検索する必要がある場合があります。これは .find() または .rfind() メソッドを使用して実行できます。まずは .find() メソッドから始めます。
find.h
1str.find("text to find")
最初に一致した部分の最初の文字のインデックスを返します。
main.cpp
1234567#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; // (code)codefinity }
検索で考慮する文字列内の最初の文字の位置も指定可能。pos 引数を使用して設定。pos インデックスより前の文字は検索時に無視。
3番目の文字から "code" を最初に見つける例。
main.cpp
1234567#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code", 3) << std::endl; // __de(code)finity }
rfind() メソッド
.rfind() メソッドを使用すると、テキスト内で最後に出現する部分を見つけることができます。
rfind.h
1str.rfind("text to find")
.find() はテキストの最初の出現位置を取得し、.rfind() は最後の出現位置を検索し、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; }
注意
.find() または .rfind() が部分文字列を見つけられない場合、string::npos を返します。これは無効な位置を表す数値定数です。size_t 型で表現できる最大値として格納されており、検索失敗を簡単に検出できます。
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; }
タスク
スワイプしてコーディングを開始
あなたはシンプルなメールフィルターを作成しています。目的は、ユーザーが任意のメールアドレスで登録できるようにし、codefinity.comからのメールを許可リストに登録することです。
関数isAllowedEmailは、emailをstring型で受け取ります。
rfind()を使って、メールアドレス内の最後の'@'記号を検索します。rfindの結果を-1と比較し、'@'記号が存在するかどうかを確認します。もし'@'が見つからなければ、そのメールアドレスは無効なのでfalseを返します。- 文字列変数
domainを空文字列で初期化します。 forループを使い、atPos + 1からemailの長さまで、'@'の後ろの文字を順に処理します。- 各イテレーションで、その文字を
domain変数に追加します。 domainが"codefinity.com"と等しければtrueを返し、それ以外の場合はfalseを返します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 6
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください