問題CPP02102の解答例と解説 C++ Lv.3
vector<string> 特定の文字列の出現回数(15分)
<解答例 1>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
まず、3行目の引数の説明は、前の問題を見てね。
vector<int> 総和
[] を使って配列のように各要素を取得した例だよ。9行目で[] を使って、i 番目の文字列を取得しているけど、const string& curr という変数に代入しているね。これは、vector の i 番目の文字列の参照を取得しているという意味だよ。const 修飾子がついているのは、もともとこの関数の引数をもらうときに vectorA に const 修飾子が付けられていて、これはすなわち vectorAの中身を変えないでね、という意味なので、1つ1つの要素に対しても、const をつける必要があるんだ。
そして、string 型は、== で比較して true か false を返すことになっているから、10行目のような条件文を書くことができるんだ。
vector<int> 総和
[] を使って配列のように各要素を取得した例だよ。9行目で[] を使って、i 番目の文字列を取得しているけど、const string& curr という変数に代入しているね。これは、vector の i 番目の文字列の参照を取得しているという意味だよ。const 修飾子がついているのは、もともとこの関数の引数をもらうときに vectorA に const 修飾子が付けられていて、これはすなわち vectorAの中身を変えないでね、という意味なので、1つ1つの要素に対しても、const をつける必要があるんだ。
そして、string 型は、== で比較して true か false を返すことになっているから、10行目のような条件文を書くことができるんだ。
<解答例 2> 不正解
F11キーでフルスクリーンモード、Escキーで元に戻ります。
これでも完全な間違いではないけど、10行目のところで、const string& ではなく、const string を使用しているところが、解答例1に比べて string 型のコピーコンストラクタが1回呼ばれる分だけ、オーバヘッドなんだ。
<解答例 3>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
10行目のところで、イテレータの値を直接、文字列と比較しているね。*iter の値は、イテレータ(iter)に*をつけることによって、実態、つまりstring オブジェクトを呼び出しているんだ。それでそのstringオブジェクトと文字列を比較しているよ。
<解答例 4>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
C++標準ライブラリの count 関数を使った例だよ。
<解答例 5>
F11キーでフルスクリーンモード、Escキーで元に戻ります。
C言語の標準ライブラリのstrcmp 関数を使った例だよ。string オブジェクトを使っているので、通常は == オペレータによる比較をすればいいから、ここであえて strcmp 関数を使う意味はないかもしれないね。けれどもこれでもきちんと動くよ。
初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録
新規登録