演習6-4 K&R プログラミング言語C
演習6-4 単語の発生頻度順に単語リストを保存するツリーを作成する構造体 freq を定義する。 tnode から freq へデータをコピーして freq を印字する。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define MAXW…続きを読む
演習6-4 単語の発生頻度順に単語リストを保存するツリーを作成する構造体 freq を定義する。 tnode から freq へデータをコピーして freq を印字する。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define MAXW…続きを読む
演習6-3 行番号のリストを構造体 lines として定義した。 tnode に行番号リストへのポインタを追加する。 ただ、lines 中の pword を使ってないので、相互参照になっていないような・・・。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string…続きを読む
演習6-2 グループの情報をリストにして保持する。 リストの各要素は、グループ名、グループに属する tnode へのポインタの配列、グループに属する tnode の数、次のノードへのポインタで構成される。 始めに tnode によるツリーを作成し、そのツリーからグループリストを生成する。 グループリストの先頭ノードは印字の際のアクセスに利用するダミーノードとなっている。 コメントや文字列中の単語の…続きを読む
演習6-1 コメント、文字列リテラル内を無視するために skip_char 関数を定義して処理する。 現在の状態をセットして、コメント、文字列リテラル内では文字の取得をスキップする。 #include <stdio.h> #include <ctype.h> #include <string.h> #define MAXWORD 100 #define BUFS…続きを読む
演習5-20 関数引数型を扱うために tokentype の値に FUNCARGS を追加する。"(" の後に "*" と ")" 以外の文字が続くと tokentype を FUNCARGS にする。 引数の中身については手抜きする。 const などの修飾子については、main 関数内でループ内で最初に修飾子のチェックを行う。 #in…続きを読む
演習5-19 type が * の場合は pre_type に * を保存してから次のループに移る。 pre_type が * かつ type が PARENS か BRACKETS の場合には、それまでの出力文字列 out をカッコでくくる。 #include <stdio.h> #include <string.h> #include <ctype.h> #…続きを読む
演習5-18 エラーが発生した場合は行末までスキップして次の入力を待つ。 エラー時にはグローバル変数 is_error に 1 を代入し結果の出力を抑制する。 #include <stdio.h> #include <string.h> #include <ctype.h> #define MAXTOKEN 100 #define BUFSIZE 100 cha…続きを読む
演習5-14 逆方向のソートを取り扱えるようにする。 my_qsort 関数に引数として reverse を追加し、比較の方向(<, >)を変化させる。 演習5-15 大文字・小文字の区別なしに比較できるようにする。 グローバル変数の fold を設定し、文字を比較する際に toupper で大文字に変換してから比較を行う。 演習5-16 文字、数字、空白についてのみ比較を行うようにす…続きを読む
演習5-13 読み込んだ行を、引数で与えられたサイズのリングバッファ配列に保存していく。 readlines はリングバッファ配列内の読み出し開始インデックスを返すように修正した。 writelines は読み出し開始インデックスを引数にとるように修正した。 #include <stdio.h> #include <stdlib.h> #include <string…続きを読む
5.10 コマンド行の引数 argc は、コマンド名 + 引数の数 argv は、コマンド引数の文字列配列を指すポインタの配列を指すポインタ #include <stdio.h> int main(int argc, char *argv[]) { printf("argc => %d\n", argc); while (argc– > 0) { pr…続きを読む