コマンド行引数に一つのファイル名を指定しそのファイルに現れる各英字(a~z及びA~Z)の出現頻度を表示するプログラムを作成しなさい。大文字と小文字の区別はしなくてよい。
これをつくりました。
#include<stdio.h>
#include<ctype.h>
int main(int argc, char *argv[/url])
{
FILE *fp;
int i, c, freq[26]={0};
if((fp=fopen(argv[1], "r"))==NULL){
printf("ファイル%sがオープンできません。\n",argv[1]);
return(1);
} else {
while ((c=fgetc(fp)) !=EOF)
if (isalpha(c))
freq[tolower(c) -'a']++;
fclose(fp);
}
for (i=0; i<26; i++)
printf("%c: %5d\n", 'a'+i, freq);
return(0);
}
これと同じ内容で, isalphaとtolowerを使わずに同じ結果のプログラムを作りたいなと思っているんですがどの子のプログラムを変えたらよいでしょうか?
isalphaとtolowerを使わずに作りたい。
Re:isalphaとtolowerを使わずに作りたい。
はて?
どの子?って言われてもよくわからないけど・・・・
isalphaとtolowerを自作すればいいのではないですか?
どの子?って言われてもよくわからないけど・・・・
isalphaとtolowerを自作すればいいのではないですか?
Re:isalphaとtolowerを使わずに作りたい。
処理系を特定しないのであれば...
> freq[tolower(c) -'a']++;
これはダメでしょう。
詳細は下記参照
http://www.kijineko.co.jp/tech/supersti ... uence.html
バグまで復元するとなると、tolowerを使わずには難しいですね。
toupperを使えば近い状態にはなると思いますが...
> freq[tolower(c) -'a']++;
これはダメでしょう。
詳細は下記参照
http://www.kijineko.co.jp/tech/supersti ... uence.html
バグまで復元するとなると、tolowerを使わずには難しいですね。
toupperを使えば近い状態にはなると思いますが...