第23章 文字列の扱い方

 文字列とは文字の羅列のことで、" " で囲んだやつです。今までたくさん使ってきましたが、この文字列って一体どういうものなのでしょうか。今回はそこに焦点を当ててみます。


 今回の要点は以下の通りです。


 では、いってみましょう。


 前回、文字は文字コードで扱うと言いました。ですから、文字列は当然文字コードの羅列で表現します

 ですが、ただ数字を並べただけではどこで文字列が終わるのかわかりません。そこで、文字列の最後には0を付ける決まりになっています。この0のことをヌルターミネータと言います。ヌルはドイツ語で0、そしてターミネータは英語で終わらせるものという意味です。

 例えば、"ABCDEFG" は、65, 66, 67, 68, 69, 70, 71, 0 になります。

 ヌルターミネータを忘れてプログラムを組んでしまうことは、初心者に多いバグの1つです。気を付けましょう。

 では、これを変数に入れるにはどうすればいいでしょうか? データの羅列は配列変数(第15章参照)の得意分野ですから、これに任せればよいでしょう。

 では、次のプログラムを見て下さい。

プログラム
// String1.cpp
#include <iostream.h>

int main()
{
    int i;
    char szHello[] = "やぁ、こんちは";

    cout << "「" << szHello << "」を文字コードに変えると、" << endl;

    for(i = 0; i < 14; i++)
        cout << (int)(unsigned char)szHello[i] << ", ";

    cout << (int)(unsigned char)szHello[14] << endl
         << "になります。" << endl;

    return 0;
}
実行結果
「やぁ、こんちは」をコードに変えると、
130, 226, 130, 159, 129, 65, 130, 177, 130, 241, 130, 191, 130, 205, 0
になります。
char szHello[] = "やぁ、こんちは";

 これを見てわかるとおり、文字列は全角でも半角でも char 型を使います。こうすれば、どちらでも入れることができるからです。全角文字は、例えば szHello[0] と szHello[1] のように、2つの変数にまたがって保存されます。

 初期化も " " で囲んだお馴染みの形を使って行えます。

 では、これを表示してみましょう。

cout  "「" << szHello << "」を文字コードに変えると、" << endl;

 このように、文字列は配列変数の名前で扱います。これには細かい文法的な意味があるのですが、それについては後に話します。

 では、文字コードがどんなもので、ヌルターミネータがあるかどうか表示してみましょう。

for(i = 0; i < 14; i++)
    cout << (int)(unsigned char)szHello[i] << ", ";

cout << (int)(unsigned char)szHello[14] << endl
     << "になります。" << endl;

 1文字1文字はふつうの配列変数と同じように、[ ] を使って表現します。

 で、表示してみると、文字コードが表示され、きちんとヌルターミネータも入っていることもわかります。(ここでもキャストについては触れませんが、こうすれば文字コードを表示することができます。)


 では、最後に szHello の中身を表にしてみましょう。

szHello[0] szHello[1] szHello[2] szHello[3] szHello[4] szHello[5] szHello[6] szHello[7]
130 226 130 159 129 65 130 177
ヌルターミネータ
szHello[8] szHello[9] szHello[10] szHello[11] szHello[12] szHello[13] szHello[14]
130 241 130 191 130 205 0


 では、今回の要点です。


 では、次回まで。さようなら。


第22章 文字とは | 第24章 文字列をいじろう

Last update was done on 1999.3.15

この講座の著作権はロベールが保有しています