システムプログラミング序論 演習 


演習 4: 複雑なデータ構造とポインタ(1)

問題:ファイルに含まれている単語の出現頻度を表示するプログラム

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> struct record { char word[20]; int count; struct record *next; }; int read_word(FILE *fp, char *word); void add_word(char *word); struct record *head = NULL; int main(int argc, char *argv[]) { FILE *fp; char word[20]; struct record *p; if (argc != 2) { printf("missing file argument\n"); return 1; } fp = fopen(argv[1], "r"); if (fp == NULL) { printf("can't open %s\n", argv[1]); return 1; } while (read_word(fp, word)) { add_word(word); } fclose(fp); for (p = head; p != NULL; p = p->next) printf("%s %d\n", p->word, p->count); return 0; }

課題 1

read_wordとadd_wordとを完成させて、プログラムを完成しなさい。 プログラムの実行ファイル名はex5-1とする.
入力に使うファイルは こちらから、ダウンロードすること.こ のファイルを使って,./ex5-1 ./sys-prog-ex4-data.txt を実行し,正しく動く かを確認すること. なお、表示結果は提出しなくてもよい。

課題 2

このプログラムを元に、出現頻度順に単語と出現頻度を表示するプ ログラムを作りなさい。 なお、単語とは空白を含まない英数字,ハイフン「-」およびアポストロフィー 「'」からなる文字列とする. プログラムの実行ファイル名はex5-2とする.
入力に使うファイルは こちらから、ダウンロードすること.こ のファイルを使って,./ex5-2 ./sys-prog-ex4-data.txt を実行し,正しく動く かを確認すること. なお、表示結果は提出しなくてもよい。