ページ 11

isalphaとtolowerを使わずに作りたい。

Posted: 2010年1月28日(木) 20:14
by nami
コマンド行引数に一つのファイル名を指定しそのファイルに現れる各英字(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を使わずに同じ結果のプログラムを作りたいなと思っているんですがどの子のプログラムを変えたらよいでしょうか?

Re:isalphaとtolowerを使わずに作りたい。

Posted: 2010年1月28日(木) 20:29
by non
はて?
どの子?って言われてもよくわからないけど・・・・
isalphaとtolowerを自作すればいいのではないですか?

Re:isalphaとtolowerを使わずに作りたい。

Posted: 2010年1月28日(木) 21:26
by たかぎ
処理系を特定しないのであれば...

> freq[tolower(c) -'a']++;

これはダメでしょう。
詳細は下記参照
http://www.kijineko.co.jp/tech/supersti ... uence.html

バグまで復元するとなると、tolowerを使わずには難しいですね。
toupperを使えば近い状態にはなると思いますが...