Δημοσιεύτηκε: 06 Ιούλ 2011, 01:35
από migf1
Το παράδειγμα της καρκινικής συμβολοσειράς στην 1η δημοσίευση δεν λειτουργεί (π.χ. το "abca" το λέει καρκινικό).

Παραθέτω κώδικα που δουλεύει. Την συνάρτηση την υλοποιώ με δείκτες, ενώ το μήκος του string το υπολογίζω μέσα στη συνάρτηση αντί να της το περνάω σαν όρισμα.

Κώδικας: Επιλογή όλων

/* ---------------------------------------------------------------------
* Από: migf1
* Διαβάζει ένα string από τον χρήστη και του απαντάει αν είναι παλινδρομικό.
* Παλινδρομικά (ή καρκινικά) ονομάζονται όσα strings διαβάζονται κι από τις μεριές
* ---------------------------------------------------------------------
*/

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

// ------------------------------------------------------------------------------------
int s_ispalindrome(char *s)
{
if ( !s ) // early exit
return 0;

char *cp1, *cp2;

cp2 = s + strlen(s) - 1; // set cp2 at end of s
for (cp1=s; cp1 < cp2 && *cp1 == *cp2; cp1++, cp2--)
;

return (cp1 >= cp2);
}

//-------------------------------------------------------------------------------------
int main( void )
{
char s[256] = "";

printf("Enter your string: ");
fgets(s, 256, stdin);
s[ strlen(s)-1 ] = '\0';

printf( "\t\"%s\" is%s palindromic\n",
s,
s_ispalindrome(s) ? "" : " not"
);

exit( EXIT_SUCCESS );
}