第2回 文字列操作2(4月15日)

今日の課題

■ malloc

例題1:長さ5の文字列 "abcde" を格納するためのメモリを確保せよ。

解答1: ⇒ list0201.c

ポイント:

■ 文字列の長さ

例題2:文字列の長さを返す関数 int mystrlen(char *) を作成せよ。

解答2: ⇒ list0202.c

ポイント:

■ 文字列の結合

例題3:2つの文字列を継いだ文字列を返す関数 char *mystrcat(char *, char *) を作成せよ。引数の文字列の長さを数え、メモリを確保して、継いだ文字列を作ること。

解答3: ⇒ list0203.c

ポイント:

□ 課題1

文字列の中の半角数字を全角数字に換えた文字列を返す関数 unsigned char *zenkakunumber(unsigned char *) を作成せよ。必要最小限のメモリを確保すること。全角文字はeucコードとする。(prac0201.c)

プログラムの概形:
/* prac0201.c */
#include <stdlib.h>
#include <stdio.h>

mystrlen をここに書く

int mynumberlen(unsigned char *s)
{
  文字列中の半角数字の数を数える
}

unsigned char *zenkakunumber(unsigned char *s)
{
  自分で作る
}

main()
{
  puts(zenkakunumber("鳥取市湖山町南4-101"));
}

正解の出力:(4と101は全角文字)

鳥取市湖山町南4-101

□ 課題2

2つの文字列の中から全角文字だけを取り出して継いだ文字列を返す関数 unsigned char *myeucstrcat(unsigned char *, unsigned char *) を作成せよ。必要最小限だけのメモリを確保すること。全角文字はeucコードとする。(prac0202.c)

プログラムの概形:

/* prac0202.c */
#include <stdlib.h>
#include <stdio.h>
int myeucstrlen(unsigned char *s)
{
  全角文字のバイト数を返す関数を自分で作る
}
unsigned char *myeucstrcat(unsigned char *s1,unsigned char *s2)
{
  自分で作る
}
main()
{
  puts(myeucstrcat("abc鳥取123県45","湖de山町"));
}

正解の出力:

鳥取県湖山町

■ 宿題

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

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


2004.4.13 by tokuhisa