Δημοσιεύτηκε: 06 Ιούλ 2011, 01:35
Το παράδειγμα της καρκινικής συμβολοσειράς στην 1η δημοσίευση δεν λειτουργεί (π.χ. το "abca" το λέει καρκινικό).
Παραθέτω κώδικα που δουλεύει. Την συνάρτηση την υλοποιώ με δείκτες, ενώ το μήκος του string το υπολογίζω μέσα στη συνάρτηση αντί να της το περνάω σαν όρισμα.
Παραθέτω κώδικα που δουλεύει. Την συνάρτηση την υλοποιώ με δείκτες, ενώ το μήκος του 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 );
}