回答編集履歴

1

途中で投稿してしまった

2020/07/15 13:39

投稿

magf
magf

スコア212

test CHANGED
@@ -2,14 +2,76 @@
2
2
 
3
3
  PAST2020 Aだと思いますが、その場合入力は英大小文字のみなので、
4
4
 
5
+
6
+
5
7
  ```C
8
+
9
+ }else if(isupper(s[i])){ //s[i]が大文字で
6
10
 
7
11
  ```
8
12
 
13
+ 英大文字の場合ここでキャッチされ、
14
+
15
+
16
+
9
17
  ```C
18
+
19
+ }else if(islower(s[i])){ //s[i]が小文字でt[i]が大文字の時
10
20
 
11
21
  ```
12
22
 
23
+ 英小文字の場合ここでキャッチされ、
24
+
25
+
26
+
13
27
  ```C
14
28
 
29
+ }else{ //もはや文字が違う時
30
+
31
+ printf("もはや全部違う\n");
32
+
33
+ char isi=tolower(s[i]); //小文字
34
+
15
35
  ```
36
+
37
+ ここに到達することはありません。
38
+
39
+
40
+
41
+ これをそのままのコードの構造で解決するのはなかなか面倒なので、アルゴリズムから見直すことにしましょう。
42
+
43
+ 質問者様のやりたかったことは、
44
+
45
+
46
+
47
+ 1. `s[i] == t[i]`なら、`cnt++`
48
+
49
+ 2. `s[i]`が大文字かつ`t[i]`が小文字のとき、`tolower(s[i]) == t[i]`なら、`cnsup++`
50
+
51
+ 3. `s[i]`が小文字かつ`t[i]`が大文字のとき、`toupper(s[i]) == t[i]`なら、`cnlow++`
52
+
53
+ 4. どの条件も満たさないとき、`cdiff++`
54
+
55
+
56
+
57
+ だと思われますが、この2と3は区別する必要がないのではありませんか?
58
+
59
+
60
+
61
+ 例えば、もうどちらも小文字に変換してから比較すれば、どちらが元々どうだったか考える必要はありません。
62
+
63
+
64
+
65
+ こういうのはどうでしょう。
66
+
67
+
68
+
69
+ 1. `s[i] == t[i]`なら、`cnt++`
70
+
71
+ 2. `tolower(s[i]) == tolower(t[i])`なら、`cnlow++`
72
+
73
+ 3. どの条件も満たさないとき、`cdiff++`
74
+
75
+
76
+
77
+ また、もしかすると、カウントする必要すらないのではないでしょうか。