fork download
  1. # include <stdio.h>
  2. // ctype.h は tolower() を使わないため不要ですが、残しておいても問題ありません。
  3. // ただし、今回は tolower() を使わない方針なので、コメントアウトするか削除します。
  4. // # include <ctype.h>
  5.  
  6. // 大文字を小文字に変換するヘルパー関数
  7. // tolower() を使わないため、自前で実装します
  8. char to_lower_custom(char c) {
  9. if (c >= 'A' && c <= 'Z') {
  10. // 大文字であれば、小文字に変換(ASCII値の差は32)
  11. return c + ('a' - 'A'); // または c + 32;
  12. }
  13. // それ以外の文字(小文字、数字、記号など)はそのまま返す
  14. return c;
  15. }
  16.  
  17.  
  18. int fuzzyStrcmp(char s[], char t[]){
  19. //関数の中だけを書き換えてください
  20. //同じとき1を返す,異なるとき0を返す
  21.  
  22. int i = 0;
  23. // どちらかの文字列が終端('\0')に達するまでループを続けます
  24. while (s[i] != '\0' && t[i] != '\0') {
  25. // 各文字をカスタムの to_lower_custom 関数で小文字に正規化して比較します
  26. if (to_lower_custom(s[i]) != to_lower_custom(t[i])) {
  27. // 大文字小文字を区別しない比較で不一致があれば、0を返して終了します
  28. return 0;
  29. }
  30. i++; // 次の文字へ進む
  31. }
  32.  
  33. // ループが終了した後、両方の文字列が同時に終端('\0')に達しているかを確認します。
  34. // もし同時に終端に達していれば、長さも一致しており、これまでの文字も全て一致しています。
  35. if (s[i] == '\0' && t[i] == '\0') {
  36. return 1; // ゆるく比較して同じであれば1を返します
  37. } else {
  38. // 片方の文字列がもう一方より長い場合(つまり、同時に終端に達しなかった場合)、
  39. // 文字列の長さが異なるため、0を返します
  40. return 0;
  41. }
  42. }
  43.  
  44. //メイン関数は書き換えなくてできます
  45. int main(){
  46. int ans;
  47. char s[100];
  48. char t[100];
  49. scanf("%s %s",s,t); // main関数は変更しないという制約
  50. printf("%s = %s -> ",s,t);
  51. ans = fuzzyStrcmp(s,t);
  52. printf("%d\n",ans);
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0s 5320KB
stdin
PASIFICA
pAsiFica
stdout
PASIFICA = pAsiFica -> 1