Δημοσιεύτηκε: 06 Ιούλ 2011, 02:05
migf1 έγραψε:Το παράδειγμα της καρκινικής συμβολοσειράς στην 1η δημοσίευση δεν λειτουργεί (π.χ. το "abca" το λέει καρκινικό).
Παραθέτω κώδικα που δουλεύει. Την συνάρτηση την υλοποιώ με δείκτες, ενώ το μήκος του string το υπολογίζω μέσα στη συνάρτηση αντί να της το περνάω σαν όρισμα.
- Κώδικας: Επιλογή όλων
/* ---------------------------------------------------------------------
* Διαβάζει ένα 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 );
}
Ομολογώ οτι είναι παράξενο γιατί για κάποια παραδείγματα που το έτρεξα δουλεύει. :/ Σε ευχαριστώ πάντως για το bug