問題CPP00406の解答例と解説 C++ Lv.2

文字列の部分検索(char*)(15分)


<解答例 1>
C++標準ライブラリの strstr 関数を使った例。多くの人はこうプログラムするはず。

標準ライブラリは、コンパイラの製造元ごとにいろいろな人たちが作っているけど、例えば UNIXやLinuxで良く使われる gcc というコンパイラのものは GNUプロジェクトという集まりで作られていて、"glibc strstr.c" とかで検索するとソースコードを公開しているサイトが見つかるよ。初めての人にはちょっと難しいかもしれないから、わからなくても問題ないよ。以下からソースコードをダウンロードできるよ。
 The GNU C Library (glibc)


<解答例 2>
この解答例では、1文字ずつポインタを進めながら調べていて、途中で標準ライブラリの strncmp 関数を使っているよ。strncmp 関数は、文字数を指定して文字列比較する関数だよ。


<解答例 3>
この解答は解答例2とほとんど同じだけど、12行目のif文が加わったことで、その時点の pIn の先頭の文字が pStr の先頭の文字と等しいときだけ、strncmp 関数を実行しているよ。最初の1文字が等しいかどうかを調べる処理は、strncmp 関数を呼び出すよりも早く終わるので、解答例3の方が解答例2よりも、もっと無駄がないプログラムだよ。


<解答例 4> 不正解
string クラスを使って実現する方法。これでもいいけど、ポインタのまま比較してあげた方がオーバヘッドが少ないよ。

12行目のsize_t というのは、コードレジュメの環境では unsigned long と同じだよ。32bitマシンなのか64bitマシンなのかとか、処理系によって、unsigned long だったり、unsigned int だったりするので、size_t というタイプ名で統一することになっているよ。






初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録