◎第8回 文字データの扱い

文字列と配列

下へ一覧へ
○テキスト
4章(4.1,4.2)

下へ上へ ○配列 添字つき変数 同じ型の変数をメモリ内の連続した場所に並べたもの 番号で順に取り扱える。個々の変数を配列要素と呼ぶ。 ( 添字 subscript ) 配列の宣言 int a[10]; 10個の整数変数を並べた配列 C では a[0]からa[9]が扱える (Pascal では a[1] から a[10]) double b[101]; 101個の double 変数を並べた配列 (C言語での添字の使い方) 2次元配列 添字が二つある配列 C や Pascal では、「配列の配列」と考える。 int a[3][2]; 整数2個の配列を三つ並べたもの (メモリ中の順番 a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1])
下へ上へ ○文字の表現 文字:数値(文字コード)に置き換える 文字情報の送り手と受け手でコード体系がちがうと「文字化け」が生じる。 ・英数字英記号の場合 ASCII(American National Standard Code for Information Interchange) 7ビット(0-127) … C言語では8ビット charを使う ASCII' + カナ = JIS(8ビット) … 8ビットchar ( unsigned char ) ASCII符号表(psfile) ・全角かな漢字の場合 漢字を含めて8(7)ビット+8(7)ビット…JIS(16ビット) 英数字2文字分 ・英数字と漢字の混在 JIS漢字 (切り換えコード) ASCII (切り換えコード)… 切り換えコードは不便 JIS 切り換え方式、メールなど (7bitでOK:多言語OK:処理が複雑:漢字非対応のソフトが使えない) EUC 処理がもっとも容易 (8ビットのJISとの混在ができない:7ビットのASCIIと混在可能 ) SJIS 処理がやや容易(8ビットJISとの混在可能) 制御文字:文字ではないが、改行などの動作を指定するコード (制御文字の例)
下へ上へ ○文字データの扱い(C言語) ・1つの文字変数には、char 1バイト(8ビット)の整数(普通は文字コード)で 表せる1つの文字しか入らない Cのプログラム中で 'a' と書くと、「aのコード」を意味する ・複数の文字(文字列)を扱う場合には文字数に応じた配列を使う (例1) char moji[5]; …… 文字変数の配列moji[5]を宣言 moji[0] = 'a'; …… aの文字コードが入っている moji[1] = 'b'; …… bの文字コードが入っている moji[2] = 'c'; …… cの文字コードが入っている。 これだけではC言語の文字列にはならない! moji[3] = 0; …… 文字列の終りを表すヌル文字必要 (例2) static char moji[5] = "abc"; …… 文字変数の配列mojiに 文字列定数"abc"を入れてみよう このように入力すると(例1)と同じことになる。 中身を除いてみると moji[0] には aの文字コードが入っている moji[1] には bの文字コードが入っている moji[2] には cの文字コードが入っている moji[3] には 文字コード0(NULL)が自動的に入っている 文字(定数):'a'のように単一引用符の中に1文字を書く 文字定数の値はコードの数値 文字列(定数):"abc"のように2重引用符で囲まれた文字の列 各要素が1文字である配列 ここで、static は一度メモリを割り当てられると、プログラムの 最初から最後まで同じアドレスに存在する変数を表す ○注意事項 ・unix のファイル中では、linefeed '\n' を「行の終り」の印として用いる。 msdos などのファイル中では、CR LF "\r\n"' を「行の終り」の印として 用いる。またMac OSではCR "\r"を用いる。 ・unixでは、画面表示のときは、\n を \r\n に自動的に変換している。 また入力の時は、Returnキーに対応する \r を \n に自動的に変換している。
下へ上へ ○演習8 8.1 文字列の長さを求めるプログラムstrlen.c( PAD psfile)の 文字型配列 a[2000]; に文字列を入力し、その長さを求めよ。 また、漢字は2文字と数えられてしまうことを確認せよ。 8.2 文字列をコピーするプログラム strcpy.c( PAD psfile)の 文字型配列 a[2000] に文字列を入力し、b[2000] にコピーせよ。 (2000 全部コピーするのは無駄である) 8.3 文字列中の小文字(a-z)の数を数えるプログラムを作成せよ。(解答)
一覧へ上へ ○レポート課題8 8.1 文字列中に、任意の文字(たとえばr)が何個含まれているか数える アルゴリズムの PAD を参考にしてプログラムを作成し、 実行結果とともに提出せよ。 8.2 入力した文字列aの前後を逆転した新しい文字列bを作成する プログラムと実行結果を提出せよ。例えば、単語が"dog"であれば、 それを逆転した単語は"god"になる。(テキストp41【演習2.21】) 8.3 単語をアルファベットだけからなる文字列として、入力した文字列中の 単語数を数えるプログラムと実行結果を提出せよ。 ヒント : 文字列を順番にアルファベットかどうかを調べて、非アルファ ベットからアルファベットに変化した回数をしらべればよい。 もっとヒント 【余裕のある人】はここをクリック!
一覧へ