Δημοσιεύτηκε: 05 Μαρ 2012, 21:24
από migf1
Εν τω μεταξύ, κοιτάζοντας στη σελίδα 181 που είπες για να δω τι ζητάει η άσκηση 17, πήρε το μάτι μου την άσκηση 16 την οποία την έχω ήδη υλοποιημένη, στη βιβλιοθήκη: libs (συνάρτηση: int s_isanagram( const char *s1, const char *s2).

Εγώ βέβαια την έχω υλοποιημένη με δείκτες, αλλά η λογική είναι ακριβώς αυτή που περιγράφει και ο King. Παραθέτω τον κώδικά της σε spoiler, σε περίπτωση που σου χρειαστεί (π.χ. για διασταύρωση με τη δική σου λύση, αν την κάνεις).

Spoiler: show
Μορφοποιημένος Κώδικας: Επιλογή όλων
/* -------------------------------------------------------------------------------
* int s_isanagram( const char *s, const char *t )
*
* -------------------------------------------------------------------------------
*/
int s_isanagram( const char *s, const char *t )
{
int val = 0, hgram[ 256 ] = {0}; /* histogram for the ASCII table*/
register char *ps = (char *) s; /* temp char-pointer to s */
register char *pt = (char *) t; /* temp char-pointer to t */

/* sanity checks */
if ( !s || !t ) { errno = EFAULT; return 0; }
if ( !*s || !*t ) { errno = EINVAL; return 0; }

memset( hgram, 0, 256 * sizeof(int) ); /* clear histogram */
for (; *s || *t; ) { /* update histogram */
if ( *s ) /* ... */
hgram[(int)*s++]++; /* ... +1 for every char in s */
if ( *t ) /* ... */
hgram[(int)*t++]--; /* ... -1 for every char in t */
}
/* check in histogram for */
while( *ps && *pt++ && !(val=hgram[(int)*ps++]) )/* 1st non-zero mapped val */
; /* of all chars in s */
return val || *pt ? 0 : 1; /* val || *pt != 0 ? FALSE:TRUE */

}

ΥΓ. Ο κώδικας της βιβλιοθήκης libs είναι ελεύθερος: http://x-karagiannis.gr/prog/libs/conte ... wnload.php