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

■ 今日のポイント

■ ファイル名リスト

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

練習1

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

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

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

# ./prac0401 < name_list.txt
1       Kimi Raikkonen
2       Felipe Massa
3       Nick Heidfeld
   - - -
23      Heikki Kovalainen
#

練習2

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

練習3

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

# ./prac0401 < name_list.txt | ./prac0101
1      Kimi Raikkonen(0)

(c) Masato TOKUHISA (2008, May, 8th.)