teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

途中で投稿してしまった

2020/07/15 13:39

投稿

magf
magf

スコア212

answer CHANGED
@@ -1,8 +1,39 @@
1
1
  これはif文とelse文の対応(というべきか?)に起因する問題ですね。
2
2
  PAST2020 Aだと思いますが、その場合入力は英大小文字のみなので、
3
+
3
4
  ```C
5
+ }else if(isupper(s[i])){ //s[i]が大文字で
4
6
  ```
7
+ 英大文字の場合ここでキャッチされ、
8
+
5
9
  ```C
10
+ }else if(islower(s[i])){ //s[i]が小文字でt[i]が大文字の時
6
11
  ```
12
+ 英小文字の場合ここでキャッチされ、
13
+
7
14
  ```C
15
+ }else{ //もはや文字が違う時
16
+ printf("もはや全部違う\n");
17
+ char isi=tolower(s[i]); //小文字
8
- ```
18
+ ```
19
+ ここに到達することはありません。
20
+
21
+ これをそのままのコードの構造で解決するのはなかなか面倒なので、アルゴリズムから見直すことにしましょう。
22
+ 質問者様のやりたかったことは、
23
+
24
+ 1. `s[i] == t[i]`なら、`cnt++`
25
+ 2. `s[i]`が大文字かつ`t[i]`が小文字のとき、`tolower(s[i]) == t[i]`なら、`cnsup++`
26
+ 3. `s[i]`が小文字かつ`t[i]`が大文字のとき、`toupper(s[i]) == t[i]`なら、`cnlow++`
27
+ 4. どの条件も満たさないとき、`cdiff++`
28
+
29
+ だと思われますが、この2と3は区別する必要がないのではありませんか?
30
+
31
+ 例えば、もうどちらも小文字に変換してから比較すれば、どちらが元々どうだったか考える必要はありません。
32
+
33
+ こういうのはどうでしょう。
34
+
35
+ 1. `s[i] == t[i]`なら、`cnt++`
36
+ 2. `tolower(s[i]) == tolower(t[i])`なら、`cnlow++`
37
+ 3. どの条件も満たさないとき、`cdiff++`
38
+
39
+ また、もしかすると、カウントする必要すらないのではないでしょうか。