《情報基礎論演習》 第6回

【配列・ポインタ その2】

注1: 文字列の入力にはgets()を使用すること。

char *gets(char *s)
getsは、標準入力からの1行を配列sに読み込む。このとき行末の改行記号は、
'\0'に置換される。この関数で返されるのはs(sの先頭アドレス)である。
(ファイルの終わり、もしくはエラー発生時にはNULL(空ポインタ)が返される)

注2: 文字列を扱う関数は、標準関数として提供されているが、今回は標準関数
を使わず自分で作成すること。(Advancedは、使ってよい)
------------------------------------------------------------------
▼ Basic 1
文字列bを文字列aにコピーする関数str_copy()を作りなさい。
戻り値はコピーした文字数とすること。
int str_copy(char a[],char b[])
又は int str_copy(char *a,char *b)

この関数を用い、入力した文字列を別の文字列にコピーし、コピーした
文字列とその長さ(改行は含まない)を出力するプログラムを作りなさい。
コピー先の文字列の最後に'\0'を必ずつけること。

例: 入力:Yokohama National University
出力:Yokohama National University, length = 28

------------------------------------------------------------------
▼ Basic 2
文字列bの最初の単語だけを文字列aにコピーする関数word_copy()を作りなさい。
戻り値はコピーした文字数とすること。
単語の区切りは1つ以上の空白とする。
文字列の先頭の空白は読み飛ばすようにすること。
int word_copy(char a[],char b[])
又は int word_copy(char *a,char *b)

これを用い、文字列の先頭の単語とその長さを出力するプログラムを作りなさい。
例: 入力:Yokohama National University
出力:Yokohama(8)

------------------------------------------------------------------
▼ Basic 3
Basic 2の関数を、コピーした文字列の直後の文字へのポインタを関数内で
保持するようにし、第2引数がNULLの時は、保持しているポインタの文字を
先頭の文字として扱うように改造する。
この関数を用いて、入力した文字列の全ての単語と長さを出力しなさい。
第2引数を初回は入力した文字列へのポインタとし、2回目以降はNULLと
なるようにして、戻り値が0になるまで繰り返しこの関数を呼ぶようにする。

例: 入力:Yokohama National University
出力:Yokohama(8) National(8) University(10)

------------------------------------------------------------------
▼ Basic 4
文字列aに、文字列bが幾つ含まれているかを調べる関数count_key()を作成
しなさい。a,bを引数とし、戻り値は含まれていた個数とする。
int count_key(char a[],char b[])
例1
文字列a = ABC ABABA CABAD ABA BA
文字列b = ABA
3個ありました
  但し、上記例のようにABABAの様な重複は、1個とする。
例2
文字列a = ABCA ABABC AABC ABCABC
文字列b = ABC
5個ありました
  例2のような ABABC AABC のような場合にも対処すること。
------------------------------------------------------------------
▽ Advanced
(演習時間内での完成は難しいので、後期の最初の演習日まで提出を受け付けます)
1行の文字数を揃えるプログラムを作成しなさい。
単語の間に空白を適当に配分し、1行の幅を揃える。
入力時の改行は、出力時には意味を持たせない。
Basic 3の関数word_copy()を利用するとよい。
その他、標準文字列関数も必要があれば、利用しなさい。

入力として~izumi/efcs/sample.txtというファイルを用意しておくので、
カレントディレクトリにコピーし、
advanced < sample.txt
の様に実行してみること。

実行例
入力:
Division of Electrical and Computer Engineering,
Faculty of Engineering,
Yokohama National University.
Exercises in Foundation of Computer Science.

出力:
Division   of  Electrical  and  Computer
Engineering,   Faculty  of  Engineering,
Yokohama  National  University. Exercises
in   Foundation   of  Computer  Science.