/* 文字列 1-9.c */ #include <stdio.h> /* 今回は文字を扱う。文字は文字列(=文字の連なり)として現れるのが普通であるから、この 連なりを一纏めにして扱うのが便利である。つまり、一つの変数名で一つの文字列を扱えれば都合 がいい。その為に配列(一つの変数名で多数のdataを扱う)を使う。 一つの変数には一つの文字しか納められないので、実質的な文字列操作をしようと思えば配列を 使わざるを得ない。 */ main() { char c1='s',c2='c',c3='h',c4='o',c5='o',c6='l'; char c[7]; char str[]="バンザイ!"; char str2[100]; // 様々な形で文字変数を宣言。 /* char c1='s';の様にすると文字の数だけ変数が要るし、各変数に一文字ずつ格納して行かねば ならない。これを表示して見よう。文字表示には%cを使う。*/ printf("* 文字列を扱う *\n\n"); printf("文字変数を 6つ使用: %c%c%c%c%c%c\n",c1,c2,c3,c4,c5,c6); /* char c[7];と配列宣言すると、同じ事をするのに変数名は一つで良くなる。文字は同じく各 要素に一つずつ格納しておく(下の一行)。ここで、実際の文字数は 6つなのに配列要素を 7つ 宣言しているのは、文字列終端記号を納めて置く為。一つの変数名で文字列を表す場合には、文 字列終端を示す必要がある。終端記号には数値 0を使う。下では、文字列終端記号としての 0 (数の 0としてではなく)であることを明示する為に、前に \を付けた\0を納めている。数字の 0が文字として扱われる時には、全く別の数値 48になる(文字も数値で納まっている)。 */ c[0]='S';c[1]='C';c[2]='H';c[3]='O';c[4]='O';c[5]='L';c[6]='\0'; //c[6]=0でも同じ printf("配列を使うと扱いが楽: %s\n\n",c); /* 文字列表示には、%sを使う。sは string( 列、連)の意。表記が随分すっきりと楽になる。 変数名は []を付けずに cとだけ書く。 幾ら配列を使っても各要素に文字を個別に入れるのは面倒である。しかし、上の宣言で char str[]="バンザイ!"; と書いたように文字列をそのまま配列文字変数に納めることが 出来る。宣言時に初期化して文字列を納める場合は、str[]の様に要素数の所は空白にしても 構わない。勝手に要素数が数えられ最後に'\0'が納まる。 また、文字列は宣言時を除けば str[]="バンザイ!"; の様な形では代入する事ができない。 文字列の代入には特別な命令が必要(次回)。 文字列を" "で囲んであるのに注目。文字は' 'で囲み、文字列は" "で囲む。 */ printf("文字列を扱えるようになった: %s\n\n",str); printf("[入力文字列を表示]\n何か入力:"); scanf("%s",str2); // scanfで文字入力も出来る(空白は不可)。 /* 入力文字列の長さがどれ位あるか不明なので、ここで使う文字変数の配列要素数は多目に宣言 しておく(str2[]には100確保)。ところで、文字列を scanf();で取りこんでいるのに変数の前 に &が付いていない。 文字列の場合には、str2[0]とか str2[3]の様に要素を指定せずに変数名だけを用いると、文字列 先頭のaddressを指すので、これで構わない。数値変数名の前に &を付けたのと同じ事である。 scanf();は指定したaddressに値を取りこむ命令。 */ printf("\n入力文字列=%s\n",str2); printf("入力文字列も扱えるぞ %s %s\n",str,str); printf("\nEnd\n"); return 0; }