#99 Article 1072 Posted at 1995/12/23 23:32:50 by MEX (MAP5294) [SAHOU.5]

Subject: Re: プログラミング作法・5:回文の判定 /1063

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define ADAM_MIN 2

static int is_adam(const char *s)
{
  int fwd = 0, rev = strlen(s);

  if(rev-- >= ADAM_MIN)
  {
    while(fwd <= rev) if(s[fwd++] != s[rev--]) return 0;
    return 1;
  }
  else
  {
    return 0;
  }
}

static char *to_alpha(char *d, const char *s)
{
  char c;
  int i = 0, j = 0;

  while((c = s[i]))
  {
    if(isalpha(c)) d[j++] = toupper(c);
    i++;
  }
  d[j] = 0;
  return d;
}

void main(void)
{
  char s[256], d[256];

  while(fgets(s, 255, stdin) != NULL)
    if(is_adam(to_alpha(d, s))) fputs(s, stdout);
}

USAGE---
program < filename または program だけで stdin から入力
BUGS---
英文字は ADAM_MIN 文字以上に反応

MAP5294 MEX
------------
ちょっと息切れ(+_+)