文字列練習ページ
整数型がintであるのに対して、文字型はcharで表します。一つのchar型の変数には一文字を格納できます。
大体は配列でchar a[10]のように定義して、文字列として扱います。配列で10文字分確保すれば10文字までの文章なら入れられますね?
【補足】07/06/23 20:00
文字列は、『最後の要素がヌル文字(空白文字, '\0')である』という規則があります。
ヌル文字を含めて10文字なので、自由に格納できる文字は9文字までです。
char a[3] = {'A', 'B', 'C'};
char a[3] = {'A', 'B'};
char a[3] = {'A', 'B', '\0'};
char a[3] = {'A', '\0'};
だと、上2つはchar型の配列。下2つは文字列であると解釈されます。
ちなみに、char型の配列中の文字列とは、『最初に出てきたヌル文字まで』をさします。
char a[7] = {'A', 'B', '\0', 'C', 'D', '\0'};
は、文字列としては、"AB"と解釈されます。
ちょっと紛らわしそうだったので補足しました。
次に文字配列への値の代入方法です。
char a[10]と定義したとすると、a[0]='A'のようにシングルコーテーションで囲んだ部分を代入します。
配列に一気に代入するときはchar a[3]={'A','B','C'}のように書くとa[0]にA,a[1]にB、a[2]にCが代入されます
char bを定義すればb = a[0]のように整数型と同様に代入するのも可能です
【補足】07/06/23 21:17
char a[3] = {'A', 'B', 'C'};
char a[3] = {'A', 'B', '\0'};
char a[3] = "AB"; // 次の要素に'\0'が自動的に付加される
上述のとおり、一番上はchar型の配列です。。下2つはどちらも文字列で、まったく同一の配列になります。
一番下の書き方は多少楽ができます。ただし、
char a[3] = "ABC";
と書くと、
char a[3] = {'A', 'B', 'C', '\0'};
と同じことなので配列の要素数を超えてしまいます。
次に文字の出力及び入力についてです
printf("文字は%c",a[1])と書けば、文字はBと出力されます。(上の例のように代入したときです)
scanf("%c",a)と書けばa[0]に入力から文字を代入できます。
scanf("%s",a)と書いてABCと入力すると、char a[3] = {'A','B','C'}と同じように代入できます
【補足】07/06/23 21:17
scanf("%s", a)と書いて ABC と入力すると、
a[0] = 'A';
a[1] = 'B';
a[2] = 'C';
a[3] = '\0';
と代入されます。これは、aが3以下の配列だとバグを含むプログラムになります。
ですので、char a[3] = {'A', 'B', 'C'}とは同じではないはずです。
* scanfは配列を使う前までは&aのように書いていましたが、何故今回はaでいいのでしょうか?考えてみてください。
補足文責:ほへい