fork download
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. #define MAX_LEN 1000
  6.  
  7. // 回文判定関数
  8. int is_palindrome(char str[]) {
  9. int left = 0;
  10. int right = strlen(str) - 1;
  11.  
  12. while (left < right) {
  13. // 左側の文字がアルファベットまたは数字でない場合は次へ
  14. if (!isalnum((unsigned char)str[left])) {
  15. left++;
  16. continue;
  17. }
  18. // 右側の文字がアルファベットまたは数字でない場合は次へ
  19. if (!isalnum((unsigned char)str[right])) {
  20. right--;
  21. continue;
  22. }
  23. // 小文字に変換して比較
  24. if (tolower((unsigned char)str[left]) != tolower((unsigned char)str[right])) {
  25. return 0; // 回文ではない
  26. }
  27. left++;
  28. right--;
  29. }
  30. return 1; // 回文
  31. }
  32.  
  33. int main() {
  34. char sentence[MAX_LEN];
  35.  
  36. printf("文字列を入力してください: ");
  37. fgets(sentence, sizeof(sentence), stdin);
  38.  
  39. // fgetsで入力すると改行が含まれるので取り除く
  40. sentence[strcspn(sentence, "\n")] = '\0';
  41.  
  42. if (is_palindrome(sentence)) {
  43. printf("この文は回文です。\n");
  44. } else {
  45. printf("この文は回文ではありません。\n");
  46. }
  47.  
  48. return 0;
  49. }
  50.  
Success #stdin #stdout 0s 5280KB
stdin
girafari
stdout
文字列を入力してください: この文は回文ではありません。