Programmazione

  • Materia: Programmazione
  • Visto: 3182
  • Data: 07/05/2008
  • Di: Redazione StudentVille.it

Linguaggio C: programma che verifica se una stringa è un palindromo

esercizio svolto o teoria

A cura di: Administrator

/*
 * (versione non ricorsiva)
 * (Palindromi) Un palindromo è una stringa che si legge allo
 * stesso modo da sinistra a destra e da destra a sinistra.
 * Alcuni esempi di palindromi sono "radar", "able was i ere
 * i saw elba" e "a man a plan a canal panama".
 * Scrivete una funzione testPalindrome che restituisca
 * 1, qualora la stringa immagazzinata nel vettore sia un palindromo,
 * e 0 in caso contrario.
 * La funzione dovrà ingorare gli spazi, la punteggiatura
 * eventualmente presenti nella stringa.
 *
 */
#include <stdio.h>
int isalfa(char);
int testPalindrome(const char[]);
#define STRINGA "  r a d  	ar"
int
main(void)
{
	printf("La stringa \"%s\" ", STRINGA);
	if (!testPalindrome(STRINGA))
		printf("non ");
	printf("è un palindromo\n");
	return (0);
}
int
testPalindrome(const char s[]) {
	int left = 0, right = 0;
	/* determina la lunghezza della stringa */
	while (s[right] != '\0')
		right++;
	while (left <= right) {
	    if (isalfa(s[left])) {
		/* ignora spazi, punteggiatura a destra */
		right--;
		while (!isalfa(s[right]))
		    right--;
		/* minuscolo != MAIUSCOLO */
		if (s[left] != s[right])
			return 0;
    	    }
	    left++;
	}
	return 1;
}
/* restituisce 1 se un carattere [a-zA-Z], 0 altrimenti */
int
isalfa(char c)
{
	if ((c != ' ') && (c != ',') &&
	    (c != '.') && (c != ';') &&
	    (c != ':') && (c != '\t') &&
	    (c != '\n'))
		return 1;
	else
		return 0;
}