こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

最頻出文字(複数個の場合はすべて表示)プログラム

最頻出文字(複数個の場合はすべて表示)するプログラムを作っています。
以下のプログラムをベースに作成しています。

英数字の個数を数えることはできましたが、
最頻出文字の表示を与えるソースがわかりません。
ASCIIコード毎の登場回数をカウントし
最頻度のASCIIコードをmax_countにしようと
としましたが全く表示されません。
もし可能であればどのようなコードにすれば以下例のような出力がでるのかご存じの方よろしくお願い致します。

=作成したいプログラムの入力出力例=========
(入力例)
I went to the house.
It was hot.

(出力例)
最頻出文字 o t ←複数ある場合は全部表示
=========================

include <stdio.h>
include <ctype.h>
include <string.h>
int main()
{ int ch='\0';
printf("英文を入力してください\n");
int alnum_count = 0;


while((ch=getchar())!=EOF){
if(isalnum(ch)!=0){alnum_count = alnum_count + 1;}
else if( max_count < count[ch] ) max_count = count[ch];
}

printf("最大個数%d\n",max_count);
printf("英数字数 %d\n", alnum_count);

return 0;
}

投稿日時 - 2020-07-04 19:49:40

QNo.9768549

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

本題と直接関係はないと思いますが

>if (ch>=65 && ch<=90||ch>=97&&ch<=122)

これは
if ('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z')
と書く方が精神衛生上よいのではないか、などといらぬ妄想をしてしまいます。

投稿日時 - 2020-07-04 22:30:56

お礼

コメントありがとうございます。感謝です。

投稿日時 - 2020-07-04 22:59:47

ANo.1

128個の32bit-int配列にASCIIコードをポインタとしてカウントを入れる。
すべて入れ終わったらカウントでインデックスをソートする。
トップと同じ頻度のインデックスをASCIIに変換して表示。
でどうでしょうか?

投稿日時 - 2020-07-04 20:27:48

お礼

コメントありがとうございます。
以下のプログラムで英文入力後
各ASCIIコードと頻度は表示され最大頻度も表示されました。
後は最大頻度の時のASCIIコードと最大頻度を表示し、ASCIIコードを英文字に変換し表示できればいいのですが、ご教示いただけると幸いです。
よろしくお願い致します。

#include <stdio.h>

int main()
{
int i,ch;
int cnt[150] ={0};

while(1){
ch =getchar();
if (ch==EOF) break;
if (ch>=65 && ch<=90||ch>=97&&ch<=122)
cnt[ch]++;
}

int max_count = 0;

for ( i = 0; i < 150; ++i ) {
if ( max_count < cnt[i] ) max_count = cnt[i];
}

puts("文字の出現回数");

for(i=65; i<123; i++)
printf("'ASCII=%d';%d\n",i,cnt[i]);
printf("Max count[%d]=%d",i,max_count);


return 0;
}

投稿日時 - 2020-07-04 20:53:06

あなたにオススメの質問