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

■ 今日のポイント

■ ファイル名リスト

ここのリンクには、以下の文字列を格納したファイルがある。各文字列は、画像ファイルの名前であるが、次のように分割して情報をとりだすことができる:最初の2文字はドライバーナンバーである。2文字固定であることを前提に文字列による数値をintに計算するプログラムを作る必要がある。4文字目からピリオドの手前までが選手の名前である。アンダーバーはスペースに変換する必要がある。
01_Fernando_Alonso.pgm
02_Lewis_Hamilton.pgm
03_Giancarlo_Fisichella.pgm
04_Heikki_Kovalainen.pgm
05_Felipe_Massa.pgm
06_Kimi_Raikkonen.pgm
07_Jenson_Button.pgm
08_Rubens_Barrichello.pgm
09_Nick_Heidfeld.pgm
10_Robert_Kubica.pgm
11_Ralf_Schumacher.pgm
12_Jarno_Trulli.pgm
14_David_Coulthard.pgm
15_Mark_Webber.pgm
16_Nico_Rosberg.pgm
17_Alexander_Wurz.pgm
18_Vitantorio_Liuzzi.pgm
19_Scott_Speed.pgm
20_Adrian_Sutil.pgm
21_Christijan_Albers.pgm
22_Takuma_Sato.pgm
23_Anthony_Davidson.pgm

練習1

ファイル名リストを標準入力から入力し、ドライバーナンバーと選手名を抽出して、タブ区切テキストとして標準出力へ出力するプログラム prac0401.c を作成せよ。このプログラムには、1行の文字列から、ドライバーナンバーと選手名を抽出する関数 split_number_name を用いることとする。

split_number_name の関数は次の仕様を満たすものとする。

実行の様子は次のとおりである。数字と名前の間にはタブが1文字入っている。

# ./prac0401 < name_list.txt
1      Fernando Alonso
2      Lewis Hamilton
3      Giancarlo Fisichella
 - - -
23     Anthony Davidson
#

練習2

以前の課題で作成した namecard.h を拡張しよう。namecard.h では既に name と age を格納する構造体を定義している。

練習3

以前に作成した prac0101.c を用いて次の動作の得られることを確認せよ。

# ./prac0401 < name_list.txt | ./prac0101
1      Fernando Alonso(0)

(c) Masato TOKUHISA (2007, April, 15.)