第1回 文字列操作1(4月14日)

今日の課題

■ 文字コード

文字コードは,「a」,「b」,「c」や「あ」,「ア」,「亜」などの文字に割り当てられた番号である。

表1:文字コードの格納と表示

文字コードの格納と表示

■ 文字列の扱い方

文字列の扱い方

図1:文字列の扱い方

□ 課題1:文字列のコピー(prac0101.c)

文字列を指定の配列変数にコピーする関数 void mystrcpy(unsigned char *, unsigned char *); を作成せよ.第一引数は,コピーされる文字列,第二引数は,コピー先の配列変数とする.コピー先の配列は,十分な大きさが確保されているものとする.

/* prac0101.c */

#include <stdio.h>

void mystrcpy(unsigned char *str1, unsigned char *str2)
{
   自分で作る
}

main()
{
  unsigned char *s1, s2[BUFSIZ];

  s1 = "ABCDEFG鳥取大学";
  mystrcpy( s1, s2 );
  printf("%s\n",s2);
}

□ 課題2:小文字を大文字に変換(prac0102.c)

文字列中の半角小文字アルファベットを半角大文字アルファベットに変換する関数 void myuppercase(unsigned char *, unsigned char *); を作成せよ.第一引数は変換される文字列,第二引数は変換後の文字列とする.第二引数は,関数を呼出す前に十分な大きさが確保されているものとする.

/* prac0102.c */

#include <stdio.h>

void myuppercase(unsigned char *str1, unsigned char *str2)
{
   自分で作る
}

main()
{
  unsigned char *s1, s2[BUFSIZ];

  s1 = "This is a pen.";
  myuppercase( s1, s2 );
  printf("%s\n",s2);
}

□ 課題3:eucコードの検出(prac0103.c)

アスキーコードとeucコードは混在して使うことができる.アスキーコードは8ビット目が必ず0で,eucコードは8ビット目が必ず1である.文字列中のeucコードの文字を表示するプログラムを作成せよ.

たとえば,"abcd鳥取123県" ならば 鳥取県 を表示する.

(ヒント)unsigned char 型変数 c の8ビット目が0か1かを判定するには,2進数で「1000000」と変数cとの論理積を計算して,結果が「0」であるか「0」でないかで判断すればよい.

□ 課題4:全角小文字を全角大文字に変換(prac0104.c)

文字列中の全角小文字アルファベットを全角大文字アルファベットに変換する関数 void myuppercase_euc(unsigned char *, unsigned char *); を作成せよ.第一引数は変換される文字列,第二引数は変換後の文字列とする.第二引数は,関数を呼出す前に十分な大きさが確保されているものとする.

たとえば、第一引数が"abcabcあいう" ならば 第二引数に"abcABCあいう" を代入する.

■ 宿題

課題3,および,課題4のプログラムをプリントアウトし,各行にコメントを手書きする.コメント付きプログラムリストおよび実行結果を提出せよ.

来週(4月21日)の授業開始時に集めます.


2005.4.6 by tokuhisa