File: palindrome.c

package info (click to toggle)
libalien-build-perl 2.84-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,116 kB
  • sloc: perl: 10,350; ansic: 134; sh: 66; makefile: 2
file content (50 lines) | stat: -rw-r--r-- 815 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* Copyright (C) 2017 Graham Ollis */
#include <libpalindrome.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

static void
copy_letters(char *buffer, const char *original)
{
  while(*original != 0)
  {
    if(isalpha(*original))
      *(buffer++) = tolower(*original);
    original++;
  }
  *buffer = 0;
}

static void
copy_reverse(char *buffer, const char *original)
{
  int i;
  for(i=strlen(original)-1; i >= 0; i--)
    *(buffer++) = original[i];
  *buffer = 0;
}

int
is_palindrome(const char *something)
{
  char *copy1;
  char *copy2;
  int ret;
  size_t len;

  len = strlen(something);

  copy1 = malloc(len+1);
  copy2 = malloc(len+1);

  copy_letters(copy1, something);
  copy_reverse(copy2, copy1);

  ret = strncmp(copy1, copy2, len) == 0;

  free(copy1);
  free(copy2);

  return ret;
}