charactores, strings
文字,文字列

8.1 節

文字や文字列の操作でよく使われる C 標準ライブラリの解説を行う.

8.2 節

文字、文字列の区別に注意する.文字定数 'z' はその計算機でも文字コードの整数値 である. 文字列は要素が char 型である配列で,最後の文字の次に '\0' が 格納されているもの.

プログラム部分 1

   char color[] = "blue";

プログラム部分 2

   char color[] = {'b', 'l', 'u', 'e', '\0'};

と等価である.

「文字型の配列」というだけでは文字列とは限らない.最後に '\0' が必要であることに 常に注意せよ.格納する文字数よりも 1 多い配列長を確保する必要がある.

8.3

<ctype.h> のインクルードで使える文字操作ライブラリについて説明する.

char 型より int 型のほうが表せる値の範囲は広い.EOF など char 型では表せないが int 型なら表せる値を扱う必要があるので 文字であっても char 型ではなく int 型でデータを扱うことが多い.

<ctype.h> をインクルードすると表 8.1 の文字操作ライブラリ関数を使う事ができる.

リスト 8.1 から8.3 は文字操作ライブラリ関数の使用例である. 必要になった時はこのサンプルを参考にして使用せよ.

8.4

<stdlib.h> のインクルードで使える文字列変換関数について説明する.

表 8.2 に一覧を示す.文字列として数値が記録されているデータを 希望の型の数値データへ変換する関数であり,利用価値が高い.

リスト 8.4 は関数 atof の使用例である.入力して実行してみよ.

関数 strtod は 2 引数, strtol, strtoul は 3 引数であることに注意せよ. 第一引数は他の関数と同様にこれから変換する文字列である. strtod, strtol, strtoul の第二引数を利用して,変換前の文字列のうち, 数値に変換された最後の文字を指すポインタが返される. 親関数の値を変えるので第二引数は文字列を表すポインタへのポインタを渡す. 戻り値ではなく,親関数が指定した変数へ小関数が値を格納することで 出力を渡す例となっている.変更したい変数そのものではなく,そのポインタを渡す ことに注意せよ.

int

図 1.出力変数を引数で指定

strtol, strtoul は第三引数をもつ.これは基数と呼ばれ, 数値へ変換されるもとの文字列が何進数で書かれているかを指定する. 基数が 2 であれば文字列 "1000" は 2 進数であり, 10 進数に変換した値は "8" である. 基数が 3 であれば文字列 "1000" は 3 進数であり, 10 進数に変換した値は "27" である. 第三引数が 2 以上 36 以下であれば指定された基数で文字列に記入されるとして処理される. 第三引数が 0 のときは特別で,8進,10進,16進を自動識別する.C 言語での慣例的な数値の 表し方である.自動識別時の規則は数値の先頭に 0x (英字の O ではなくゼロ)または 0X があれば 16 進数とし,それ以外で数値の先頭に 0 があれば 8 進数とする. いずれでもない場合は 10 進数として処理される.

リスト 8.8 を入力,実行せよ,変換前の文字列 "-1234567abc" を 8 進数として処理させる には "-01234567abc" に変更すればよい.同様に 16 進数として処理させる場合は "-0x1234567abc" に変更すればよい.ただし 'a','b','c' は 16 進数では数字なので この場合は数値として処理されることに注意せよ.

8.5

<stdio.h> のインクルードで使える文字,文字列列変換関数について説明する.

リスト 8.11 では getchar を使って文字列を入力している. getchar の繰り返しで文字の配列を構成し,最後に '\0' を 明示的に挿入していることに注意せよ.また,このプログラムは ある条件まで入力を繰り返す例の典型になっているので while の 終了条件をよく理解せよ.リスト 8.11 を入力し,動作を確認せよ.

sprintf, sscanf はそれぞれ printf, scanf に似ている. 違いは sprintf では画面に出力する代わりに文字列に出力し, sscanf はキーボードから入力する代わりに文字列から入力することである.

8.6

<string.h> のインクルードで使える文字列列変換関数のうち, strcpy, strncpy, strcat, strncat について説明する.


Updated in November 10, 2007, schedule, Yamamoto Hiroshi