回答編集履歴

1

回答追記

2023/09/11 11:02

投稿

otn
otn

スコア84788

test CHANGED
@@ -11,3 +11,40 @@
11
11
  「`i`: ループカウンター」とかじゃなくて具体的に詳しく。
12
12
  まず日本語で全体の処理手順を書いてみるとかも有効です。
13
13
 
14
+ ## 追記
15
+
16
+ 元のプログラムの方針で完成したようなので、別解を書いておきます。変数名はそのままにしてますが。
17
+ ```C
18
+ (前略)
19
+ int str[256] = {0};
20
+ (中略)
21
+ while ((c = fgetc(fp)) != EOF)
22
+ {
23
+ str[c&255]++;
24
+ }
25
+ for (i = '!'; i <= '~' ; i++) {
26
+ if (str[i] >= 1) {
27
+ fprintf(fpout, "%c; %d\n", i, str[i]);
28
+ }
29
+ }
30
+ (後略)
31
+ ```
32
+
33
+ 別案:
34
+ ```C
35
+ (前略)
36
+ int str['~'-'!'+1] = {0}; // str[94]と書いても良いが
37
+ (中略)
38
+ while ((c = fgetc(fp)) != EOF)
39
+ {
40
+ if(c>='!' && c<='~') {
41
+ str[c-'!']++;
42
+ }
43
+ }
44
+ for (i = '!'; i <= '~' ; i++) {
45
+ if (str[i-'!'] >= 1) {
46
+ fprintf(fpout, "%c; %d\n", i, str[i-'!']);
47
+ }
48
+ }
49
+ (後略)
50
+ ```