第7章 文字列の扱い
今回は、文字列の扱いです。BASIC出身者が、最初に躓くのが
文字列の扱いです。(他の人は、知りませんが筆者は、この
文字列の扱いに「あれーーーー」と頭を悩ませました。)
これについては、あとでポインタのところでまた触れますので、
この章では、さらっとさわりだけです。
まず、文字列を考える前に、文字型について考えてみましょう。
第5章で、述べたように
文字型は、charです。
ところで、charは何て読むの?
はい、「キャラ」と読む人が多いみたいです。中には、「チャー」と
発音する人もいます。まー、何でもいいみたいです。
charは、1バイト文字を表すデータ型です。
たとえば、次のように使います。
char ch='a';
こういう風に、宣言するとキャラ型の変数chに、「a」が入って
いますよ、と言う意味です。
(aが、シングル・クォーテーションで囲まれて
いることに注意してください。)
普通の数字みたいな取り扱いで
OKです。実際chには、単なる数値が入っています。
実験してみましょう。
char型変数a,b,cに文字、「a」「B」「6」を代入します。
それを、printfで確かめます。文字型を表す書式
指定は、%cであることに注意してください。
次に、同じa,b,cを、書式指定%dで表示してみてください。
実行結果は、左の図のようになります。
「*には、文字*が入っています。」は、
想像通りの結果ですね。次の
「*には、数字*が入っています。」は、
どうでしょう。97,66,54という
数字が現れました。これは、実はa,B,6のアスキーコード
なのです。アスキーコード表は、たいていの
入門書の最後の方のページについているので
確かめてください。
えっ!調べたが、そんなもの載っていないよ!
という人には、VC++のヘルプで「C/C++ 言語とランタイム リファレンス」
「キャラクター コード」「ANSI キャラクター セット」
の順に進んでいってください。コード表が見られます。
おー!ヘルプって便利だな!
ということがおわかりになると思います。
では、文字列はどう扱うの?
と、いう本題に入りましょう。誤解を恐れずに言えば、
「文字の配列で表す」ということです。
(厳密には正しくありません。でも今は、こういうふうに
理解しても支障はありません。ずーっと、このように理解
していてもあまり困ることはありません。でも、あまり
おおっぴらにいうと、「あいつは、あまり物を知らない」と
思われるので、大きい声では言わない方がよいでしょう。 (^-^;) )
では、配列はどう表すの?
はい、次のように表します。
int a[3];
char c[5];
などのように宣言します。
最初の方は、int型の変数a[0],a[1],a[2]を宣言したと
考えればよいでしょう。[]の中の数字は、0から始まる
ことに注意してください。
次の、char c[5];は、char型の変数c[0],c[1],c[2],c[3],
c[4]をまとめて宣言したと考えてください。
a[2]や、c[0]などは、要素と呼ぶこともあります。
これらの要素は、普通の変数と同じに取り扱えます。
配列に、ついてはあとの章で詳しく解説しますので今は、
雰囲気だけで結構です。
では、文字列の解説です。
表したい文字列をダブル・クォーテーションで囲みます。
この囲まれた、物そのものは、文字列の最初の文字の
アドレスを表します。最初から文字列を宣言するときは、
次のようにします。
char *str = "ABC";
これの意味するところは、
str[0]='A',str[1]='B',str[2]='C',str[3]='\0'
と言うことです。最後の「\0 」は、ヌル文字と言って
文字列の最後を表す記号だと思ってください。Cでは、
文字列の最後に、必ず¥0がつきます!従って
"ABCD"と言う文字列は、5バイトです。自分で領域
を確保するようなときは、十分に気をつけてください。
また、上のような宣言の仕方は、かなり特殊な物なので
いまは、こういうふうに宣言すると、思ってください。
あとの章でもっと違う方法を紹介します。
いろいろご不満も
おありでしょうが、理屈はあとで考えるとして
次のように、ソースファイルを作って、ビルドしてみてください。
さて、これをビルドして実行してみてください。
puts()は、自分でヘルプで調べてみてください。
あー、実行する前に、どういうふうになるか予想してみてください。
想像したような結果になれば、この章は卒業です。
想像したのと別な結果になっても、今は気にする必要はありません。
気にせず、次に進んでください。
[Index][総合Index]
[Previous Chapter]
[Next Chapter]
Update Oct/19/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、
転載あるいはコンピュータ等のファイルに保存することを禁じます。