Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ チャレンジ:文字列要素のアクセスと操作 | テキストデータ型
C++データ型
セクション 3.  3
single

single

bookチャレンジ:文字列要素のアクセスと操作

メニューを表示するにはスワイプしてください

文字列のインデックス指定

string(本質的には char 型の文字)の要素には、配列と同様に角括弧 [] を使ってインデックス指定でアクセス可能。これにより、特定の位置の文字を置き換えることも可能。

indexing.h

indexing.h

copy
12
string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
Note
注意

string のインデックスは配列と同様に 0 から始まる。

文字列の長さ

このインデックス指定では、範囲外のインデックスにアクセスしようとしても、コンパイラから何の警告も表示されません。

main.cpp

main.cpp

copy
1234567
#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }

ご覧の通り、出力は予期しないものであり、C++はこの問題について警告を出しません。これを防ぐために、.length()メソッドを使用してstringの長さを取得し、インデックスが有効な範囲内かどうかを確認できます。

main.cpp

main.cpp

copy
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

at.h

copy
1
str.at(n);

str[n] と同様に動作しますが、範囲外のインデックスを指定するとエラーが発生します。

main.cpp

main.cpp

copy
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

main.cpp

copy
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 は、メールアドレスを表す文字列を受け取ります。

  1. maskEmail 内で、find メソッドを使って、ユーザー名の終わりを示す '@' 記号の位置を特定します。
  2. ユーザー名が1文字より長いかを確認します。そうでなければ、メールアドレスをそのまま返します。
  3. for ループを使い、インデックス 1 から '@' の位置の直前まで繰り返します。
  4. ループ内で、各文字を '*' に置き換えてユーザー名をマスクします。
  5. 変更後のメールアドレスを返します。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  3
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt