Opgaver i denne lektion   Gå til annoteret slide, hvor denne opgave er tilknyttet -- Tastaturgenvej: 'u'   Alfabetisk indeks   Kursets hjemmeside   

Opgaveløsning:
Palindromer


Du kan vælge at se en video hvor jeg diskuterer den iterative og rekursive løsning. Her er en løsning, som minder ganske meget om den løsning på palindrom problemet, der udvikles i videoen:

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

int is_palindrome_rec(char *str);
int is_palindrome_rec_len(char *str, int lgt);
int is_palindrome_iter(char *str);

int main(void) {
  char str[100];

  do{
    printf("Enter string (the string exit will stop the program): ");
    scanf("%s", str);

    if (strcmp(str,"exit") != 0){
      if (is_palindrome_iter(str))
        printf("Iterative %s is a palindrome\n", str);
      else
        printf("Iterative: %s is NOT a palindrome\n", str);
    }

    if (strcmp(str,"exit") != 0){
      if (is_palindrome_rec(str))
        printf("Recursive: %s is a palindrome\n", str);
      else
        printf("Recursive: %s is NOT a palindrome\n", str);
    }

  }
  while (strcmp(str,"exit") != 0);

  return 0;
}

int is_palindrome_rec(char *str){
  int lgt = strlen(str);
  return is_palindrome_rec_len(str, lgt);
}

int is_palindrome_rec_len(char *str, int lgt){
  if (lgt < 2)
    return 1;
  else
    return str[0] == str[lgt-1] && is_palindrome_rec_len(str+1, lgt-2);
}

int is_palindrome_iter(char *str){
  int i, j;
  for(i = 0, j = strlen(str)-1; i < j; i++, j--)
    if (str[i] != str[j]) 
      return 0;
  return 1;     
}