プログラミング基礎B 文字列の扱い
文字コード(ASCIIコード) 数値と文字が対応している
char型変数(p.92) 文字を扱うために用いられる (ただし半角文字だけ) char型は1バイトの大きさの変数 /* example-7.1 */ #include <stdio.h> int main(void) { char m; m = 65; printf("%d\n",m); printf("%c\n",m); m = 'B'; return 0; } char型は1バイトの大きさの変数 28=256種類の数値しか扱えない int型は4バイトの大きさの変数 232=4294967296種類の数値を扱える
文字の表示(p.94) キャラクタコードに 対応した文字を表示 /* example-7.1 */ #include <stdio.h> int main(void) { char m; m = 65; printf("%d\n",m); printf("%c\n",m); m = 'B'; return 0; } 表示結果 65 A キャラクタコードに 対応した文字を表示
「'」による文字コードの表現 「’」(シングルクォーテーション)で囲まれた文字は キャラクタコードに 対応した数値が得られる /* example-7.1 */ #include <stdio.h> int main(void) { char m; m = 65; printf("%d\n",m); printf("%c\n",m); m = 'B'; return 0; } mには66という数値が入る 66 B 「’」(シングルクォーテーション)で囲まれた文字は キャラクタコードに 対応した数値が得られる m=66と同じ意味になる
文字列 (p96) ー 文字配列 char型の大きさは1バイトなので char型の配列は メモリ上で連続した6バイトに配置される /* example-7.2 */ #include <stdio.h> int main(void) { char st[6]; st[0]='P'; st[1]='a'; st[2]='n'; st[3]='d'; st[4]='a'; st[5]='\0'; printf("%s\n",st); return 0; } XXXX st[0] XXXX+1 st[1] XXXX+2 st[2] XXXX+3 st[3] XXXX+4 st[4] XXXX+5 st[5]
文字列 ー 文字配列 st[0]='P'とすると, Pの文字コード80が 0番目の要素に入る /* example-7.2 */ 文字列 ー 文字配列 st[0]='P'とすると, Pの文字コード80が 0番目の要素に入る /* example-7.2 */ #include <stdio.h> int main(void) { char st[6]; st[0]='P'; st[1]='a'; st[2]='n'; st[3]='d'; st[4]='a'; st[5]='\0'; printf("%s\n",st); return 0; } XXXX 80 st[0] XXXX+1 st[1] XXXX+2 st[2] XXXX+3 st[3] XXXX+4 st[4] XXXX+5 st[5]
文字列 ー ヌルコード /* example-7.2 */ #include <stdio.h> int main(void) 文字列 ー ヌルコード /* example-7.2 */ #include <stdio.h> int main(void) { char st[6]; st[0]='P'; st[1]='a'; st[2]='n'; st[3]='d'; st[4]='a'; st[5]='\0'; printf("%s\n",st); return 0; } XXXX 80 st[0] XXXX+1 97 st[1] XXXX+2 110 st[2] XXXX+3 100 st[3] XXXX+4 97 st[4] XXXX+5 st[5] '\0'はヌルコードと呼ばれる(p.97) 数値としては0 文字列の最後を意味する記号
文字列 ー 文字列の表示 /* example-7.2 */ #include <stdio.h> int main(void) 文字列 ー 文字列の表示 /* example-7.2 */ #include <stdio.h> int main(void) { char st[6]; st[0]='P'; st[1]='a'; st[2]='n'; st[3]='d'; st[4]='a'; st[5]='\0'; printf("%s\n",st); return 0; } “%s”で文字列の入っている配列の内容を表示できる(p.97) 引数は配列名を与える(配列の先頭アドレス)
実習 例題7.1を打ち込み実行せよ 例題7.2を打ち込んで実行せよ 数値,文字を変更して動作を確認せよ printf("%c\n",65)と数値を直に指定したらどうなるか確認せよ 例題7.2を打ち込んで実行せよ 例題7.3のように文字列の途中に'\n'を入れるとどうなるか確認せよ
文字列の初期値設定(p.99) /* example-7.4 */ #include<stdio.h> int main(void) { char st1[]="Giant Panda"; char st2[]="Lesser Panda"; printf("%s and %s\n",st1,st2); return 0; } 「"」(ダブルクォーテーション)で囲まれた文字列によって配列の初期化が可能 "\0"は自動的に挿入される st[]とすることで,11+1文字の大きさの配列st1が用意される。 char st[12]="Giant Panda" としても問題ない
scanfによる文字列の入力 空の文字列配列を用意する (大きさは余裕を持たせること) /* example-7.5 */ #include <stdio.h> int main(void) { char st[80]; printf("文字列を入力してください"); scanf("%s", st); printf("%s\n", st); return 0; } 空の文字列配列を用意する (大きさは余裕を持たせること)
scanfによる文字列の入力 scanfによって文字列を 配列stへ入力できる 変換指定子は"%s" 引数は配列名のみ /* example-7.5 */ #include <stdio.h> int main(void) { char st[80]; printf("文字列を入力してください"); scanf("%s", st); printf("%s\n", st); return 0; } scanfによって文字列を 配列stへ入力できる 変換指定子は"%s" 引数は配列名のみ
入力結果(問題がない場合) scanfの結果 キーボードから入力した "Lion"が配列stに 読み込まれている /* example-7.5 */ #include <stdio.h> int main(void) { char st[80]; printf("文字列を入力してください"); scanf("%s", st); printf("%s\n", st); return 0; } scanfの結果 キーボードから入力した "Lion"が配列stに 読み込まれている ※最後の'\n'は自動的に入る 実行結果 文字列を入力してください Lion Lion
入力結果(問題有り) "The Lion"の中の"The"だけ読み込まれている 空白文字も文字列の終わりと 見なされる /* example-7.5 */ #include <stdio.h> int main(void) { char st[80]; printf("文字列を入力してください"); scanf("%s", st); printf("%s\n", st); return 0; } "The Lion"の中の"The"だけ読み込まれている 空白文字も文字列の終わりと 見なされる 実行結果 文字列を入力してください The Lion The
実習 例題7.4を実行せよ 以下の内容をreturn 0;の前に追加して配列の内容を確認せよ(変数iは宣言してください) 例題7.5を実行せよ 上と同じような命令文を挿入して配列の内容を確認せよ。 for (i = 0; i < 12; i++) { printf("%c %d\n",st1[i], st1[i]); }
練習問題 Rドライブに入っている演習問題をやってください
puts,gets関数 puts関数 文字列を表示する関数 puts("文字列"); puts(配列名); で画面に表示される /* example-7.7*/ #include <stdio.h> int main(void) { char st[80]; puts("文字列を入れてください"); gets(st); puts(st); return 0; } puts関数 文字列を表示する関数 puts("文字列"); puts(配列名); で画面に表示される 改行が自動的に挿入される 文字列を入れてください This is a pen.
puts,gets関数 gets関数 文字列を配列へ入力する gets(配列名); scanfと似ているが 空白文字も入力できる /* example-7.7*/ #include <stdio.h> int main(void) { char st[80]; puts("文字列を入れてください"); gets(st); puts(st); return 0; } gets関数 文字列を配列へ入力する gets(配列名); scanfと似ているが 空白文字も入力できる 文字列を入れてください This is a pen.