教えてください
Posted: 2012年7月05日(木) 15:26
プログラミングの演習
1.ファイル内の英数字の文字数を数えるⅠ
sample.txt を入力ファイルとし,このファイル内の各英数字の文字数を数え,結果を指定されたファイルへ書き出すプログラムを作成しなさい.なおデータ構造及び関数仕様は,以下に指定したものを必ず利用すること.
(準備)このテキストファイルを sample.txtという名前で保存しなさい.
(結果)このテキストファイルのような結果になればプログラムは正しい.diff コマンドを利用して一致しているかを調べよう.
コマンド仕様は次のようにする.(count は各自が作成するプログラムの実行ファイル名とする)
count 入力ファイル名 結果のファイル名
カウントする文字は,英数字のみとする.大文字と小文字は区別する.その他の文字は無視してよい.
プログラムを作成する際の注意,基本的な考え方
英数字を表わす文字コードは,ASCIIコード表にあるコードで記述されている.
0から9,aからz, AからZは連続した数で表されている.
ファイルから読んだ文字が0から9,aからz,及びAからZであるかどうかを判断し,該当する文字の数をそれぞれ数えるプログラムを作ればよい.
0から9,aからz,AからZの間の文字であるかどうかは,以下の関数を利用してよい.詳細は,各関数のマニュアルを参照のこと.なお,以下の関数はすべて利用するのではなく,適宜利用すればよい
isalnum() 英数字かどうか
isdigit() 数字かどうか
isalpha() 英字かどうか
isupper() 大文字かどうか
islower() 小文字かどうか
データ構造
struct CharCount 型の配列を作成し,配列のインデックスと文字コードの関係付けをする.
struct CharCount {
char c; /* 文字 */
int num; /* 表れた数 */
};
/*
* 定数マクロを記述する.
*/
#define NUM 0 /*数字の先頭インデックス */
#define LOWER 10 /* 英小文字の先頭インデックス */
#define UPPER 36 /* 英大文字の先頭インデックス*/
#define MAX 62 /* 配列の最大数*/
以下の配列は、mainで宣言する.
/*
* 配列内のデータの意味
*
* 0 - 9 数字
* 10-35 小文字
* 36-61 大文字
*/
struct CharCount array[MAX];
関数仕様
/*
* CountChar --- 指定された文字数を数える.
*
* 引 数 array(I/O) 文字数を記録する配列
* c(I) 新たにカウントする文字
* 返り値 なし.
*/
void CountChar (struct CharCount *array, int c)
(ヒント)
読み込んだ文字から配列のインデックスを得るにはどうするか?
ASCII コード表では,0-9, a-z, A-Z は昇順に並んでいることを利用する.
文字同士の引き算をするとどうなるか考えよう.
この問題解き方おしえてください><
1.ファイル内の英数字の文字数を数えるⅠ
sample.txt を入力ファイルとし,このファイル内の各英数字の文字数を数え,結果を指定されたファイルへ書き出すプログラムを作成しなさい.なおデータ構造及び関数仕様は,以下に指定したものを必ず利用すること.
(準備)このテキストファイルを sample.txtという名前で保存しなさい.
(結果)このテキストファイルのような結果になればプログラムは正しい.diff コマンドを利用して一致しているかを調べよう.
コマンド仕様は次のようにする.(count は各自が作成するプログラムの実行ファイル名とする)
count 入力ファイル名 結果のファイル名
カウントする文字は,英数字のみとする.大文字と小文字は区別する.その他の文字は無視してよい.
プログラムを作成する際の注意,基本的な考え方
英数字を表わす文字コードは,ASCIIコード表にあるコードで記述されている.
0から9,aからz, AからZは連続した数で表されている.
ファイルから読んだ文字が0から9,aからz,及びAからZであるかどうかを判断し,該当する文字の数をそれぞれ数えるプログラムを作ればよい.
0から9,aからz,AからZの間の文字であるかどうかは,以下の関数を利用してよい.詳細は,各関数のマニュアルを参照のこと.なお,以下の関数はすべて利用するのではなく,適宜利用すればよい
isalnum() 英数字かどうか
isdigit() 数字かどうか
isalpha() 英字かどうか
isupper() 大文字かどうか
islower() 小文字かどうか
データ構造
struct CharCount 型の配列を作成し,配列のインデックスと文字コードの関係付けをする.
struct CharCount {
char c; /* 文字 */
int num; /* 表れた数 */
};
/*
* 定数マクロを記述する.
*/
#define NUM 0 /*数字の先頭インデックス */
#define LOWER 10 /* 英小文字の先頭インデックス */
#define UPPER 36 /* 英大文字の先頭インデックス*/
#define MAX 62 /* 配列の最大数*/
以下の配列は、mainで宣言する.
/*
* 配列内のデータの意味
*
* 0 - 9 数字
* 10-35 小文字
* 36-61 大文字
*/
struct CharCount array[MAX];
関数仕様
/*
* CountChar --- 指定された文字数を数える.
*
* 引 数 array(I/O) 文字数を記録する配列
* c(I) 新たにカウントする文字
* 返り値 なし.
*/
void CountChar (struct CharCount *array, int c)
(ヒント)
読み込んだ文字から配列のインデックスを得るにはどうするか?
ASCII コード表では,0-9, a-z, A-Z は昇順に並んでいることを利用する.
文字同士の引き算をするとどうなるか考えよう.
この問題解き方おしえてください><