わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

文字列の「走査」と「操作」

では,これまで説明したことをもとに,ポインタを使って文字列をアクセスするプログラムをお見せします.
テーマは「文字列走査」です.走査とは,先頭から順に見ていく,という意味です.スキャン(scan)とも言います.メモリのスキャンとか,ファイルや,ディスク全体についても,スキャンするといった表現がされることがあります.メモリやディスクなんかを全部見るというときには,これは俗な表現ですが,「舐める」と言ったりします.
走査,というのは見慣れない言葉かもしれません.「そうさ」というとむしろ,「操作」の熟語のほうを思い浮かべるかもしれません.確かに,文字列の操作も,プログラミングの格好の題材です.こちらは,もともとある文字列に,何らかの処理を施して,文字列の値…「中身」を変えていくことを指します.
この意味の操作を,英語で何というかは,知っておく価値があると思います.入試英語でoperate,あるいはその名詞形としてoperationというのは学んだと思いますが,この単語はコンピュータの世界ではたいてい「演算」という意味で用いられます.まあOperating Systemという例外もありますが.
文字列の操作については,動詞形ならmanipulate,名詞ならmanipulationと書きます.文字列以外にも,「手を加える」という処理をするものにはこの表現がとられます.
Cのプログラミングの授業では,走査のしかたを先に説明し,操作のしかたは別の機会としたいと思います.というのは,操作すなわち文字列の中身を変えようとするとき,どういう処理をすればよいかについて,よくよく注意しないと,おかしな結果になりやすいからです.ナル文字を忘れて,文字列の出力が終わらない,ということになってはいけません.走査は,文字列の中身を変えることがないので,その分,わずらわしいことに悩まされずに「中身を見る」ことができるのです.
配列に格納された文字列だけでなく,文字列リテラルに対しても,走査は可能ですが操作してはならないというのは,つい先ほど説明した「配列変数にできて,ポインタ変数にできないこと」を思い出せば,納得できるでしょう.
それと,文字列の操作については,しばしば「もとの文字列よりも長くなる」ということが起こりまして,そうなると,配列領域の拡張ということを検討しないといけません.何にせよ,厄介なのです.
「長くなっても格納できる」だけの配列領域をあらかじめ確保し,そこに「もとの文字列」を格納する,という方法も考えられますが,操作すべき文字列を配列に持つ場合などでは,必ずしも実用的・効率的とは言えません.