セクション 3. 章 3
single
チャレンジ:文字列要素のアクセスと操作
メニューを表示するにはスワイプしてください
文字列のインデックス指定
string(本質的には char 型の文字)の要素には、配列と同様に角括弧 [] を使ってインデックス指定でアクセス可能。これにより、特定の位置の文字を置き換えることも可能。
indexing.h
12string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
注意
string のインデックスは配列と同様に 0 から始まる。
文字列の長さ
このインデックス指定では、範囲外のインデックスにアクセスしようとしても、コンパイラから何の警告も表示されません。
main.cpp
1234567#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }
ご覧の通り、出力は予期しないものであり、C++はこの問題について警告を出しません。これを防ぐために、.length()メソッドを使用してstringの長さを取得し、インデックスが有効な範囲内かどうかを確認できます。
main.cpp
123456789101112#include <iostream> int main() { std::string word = "Codefinity"; int index = 12; if (index >= word.length()) std::cout << "The output is unexpected!" << std::endl; else std::cout << word[index]; // Word's length is 10 }
メソッドを使用したインデックス指定
もう一つのインデックス指定方法は、.at() メソッドを使う方法です。インデックス n の文字を取得するには、次の構文を使用します。
at.h
1str.at(n);
str[n] と同様に動作しますが、範囲外のインデックスを指定するとエラーが発生します。
main.cpp
12345678#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word.at(12); // word's length is 10 // Try outputting the character with the index 5 }
練習
前述の通り、インデックス指定([] および .at() の両方)を使って文字列内の文字を置き換えることができます。以下はその例です:
main.cpp
123456789#include <iostream> int main() { std::string word = "Cpdefinitu"; word[1] = 'o'; word.at(word.length() - 1) = 'y'; // length - 1 accesses the last element std::cout << word; }
タスク
スワイプしてコーディングを開始
メールアドレスを文字列として保持しています。プライバシー保護のため、メールアドレスのユーザー名部分をマスクすることが課題です。
関数 maskEmail は、メールアドレスを表す文字列を受け取ります。
maskEmail内で、findメソッドを使って、ユーザー名の終わりを示す'@'記号の位置を特定します。- ユーザー名が1文字より長いかを確認します。そうでなければ、メールアドレスをそのまま返します。
forループを使い、インデックス 1 から'@'の位置の直前まで繰り返します。- ループ内で、各文字を
'*'に置き換えてユーザー名をマスクします。 - 変更後のメールアドレスを返します。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 3
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください