先週の内容 文字列と文字の関係 文字 : 'A' 「A」という文字(1文字)を表す(C 言語の表現) # 実は、C 言語に於ける「文字」は、小さな整数値(文字コード) # 「文字」と「文字コード」の関係は、ASCII 表を参照 コンピュータの中では、全ての情報は「数値」 実際に扱える情報は、「数値」以外(音声、画像、Yes/No, etc..)もある 何故、数値しか利用できないコンピュータで、様々な形の情報が扱えるか ? Coding されているから Coding : あるルールで、対応付けする事 例 : ASCII Code : 文字と数値の対応 コンピュータ<-Coding->現実 'A'=65 A +32 | 大文字を小文字に変関する(情報処理) (計算) v 'a'=97 a 文字の出力は putchar(C); C で指定した「文字」を出力 文字の入力は getchar(); 文字列 "ABC" : 「A」、「B」、「C」の三つの文字からなる文字の列 "ABC" '=, { 'A', 'B', 'C', '\0' } '\0' : (数値としては 0) で、文字列最後に必ずあるので、 End Of String ( EOS ) と呼ぶ ( 「NULL 文字」と呼ぶ人も居る ) "" (空文字) '=, { '\0' } "ABC" '=, { 'A', 'B', 'C', '\0' } *"ABC" -> 'A' : 先頭に * を付けると、先頭の文字になる "ABC" | +--- 'A' : *"ABC" | +--- "BC" : "ABC" + 1 | +--- 'B' | +--- "C" | +--- 'C' | +--- "" | +--- '\0' *"ABC" -> 先頭の文字 *("ABC"+0) -> 先頭の文字 ( 0 番目 ) *("ABC"+1) -> *("BC") -> 'B' -> 次の文字 ( 1 番目 ) *("ABC"+2) -> *(("ABC"+1)+1) -> *("BC"+1) -> *"C" -> 'C' -> 2 番目 *(文字列 + k) -> 「k 」番目 -> 文字列[k] と書くもできる # 'A' + 1 -> 'B' (ASCII Code 表によって整数値になっている) 様々な「再帰呼び出し」をしてみよう -> 文字列の再帰性に着目すると、文字列の処理は、再帰呼出しで実現すると簡単 文字列 : 1) "" 空文字列は、文字列 2) C 文字で、S が文字列なら S の前に C を追加したものも文字列 "ABC" -> 'A' @ "BC" # "ABC" が文字列かどうかを判定するために "BC" が文字列である事を利用する 3) 1), 2) だけが文字列 <参考> ペアノの公理(自然数の定義) 1) 0 は自然数 2) n が自然数ならば n + 1 も自然数 # n+1 が自然数かどうかを n が自然数かどうかで判断 3) 1), 2) だけが自然数 # この自然数の定義から数学的帰納法が導かれる # -> それを C 言語で処理する表現が再帰呼出し