Δημοσιεύτηκε: 23 Μαρ 2012, 04:56
από migf1
Μια χαρά λύση τη βλέπω εγώ, αλλά σε real-life εφαρμογή χρειάζονται περισσότεροι έλεγχοι.

Θα μπορούσες επίσης να αποφύγεις τη χρήση συναρτήσεων στο τέλος (που είναι αργές) και να δουλέψεις απευθείας στην τρέχουσα θέση του name.

Κάτι σαν κι αυτό...
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

/* ------------------------------------------------------- */
void reverse_name( char *name )
{
char ch, *cp = NULL;

if ( !name )
return;

/* find & save the 1st letter of first name */
for (cp=name; *cp && isspace(*cp); cp++) /* skip any blanks */
; /* void */
if ( !*cp ) /* name was empty or all blanks */
return; /* ... early exit */

ch = *cp; /* save 1st letter */

/* find start of last name */
for (; *cp && !isspace(*cp); cp++ ) /* skip first name */
; /* void */
for (; *cp && isspace(*cp); cp++ ) /* skip any blanks */
; /* void */
if ( !*cp ) /* there was no non-blank last name */
return; /* ... early exit */

/* copy last name to start of name */
while ( *cp && !isspace(*cp) )
*name++ = *cp++;

/* append the mummble-jumble asked by the exercise */
*name++ = ',';
*name++ = ' ';
*name++ = ch;
*name++ = '.';
*name = '\0';
}
/* ------------------------------------------------------- */
int main( void )
{
char name[] = " Harry Karayannis ";

reverse_name( name );
printf( "%s\n", name );

system("pause"); /* windows only */
exit( EXIT_SUCCESS );
}

ΥΓ: Η συνάρτηση δεν είναι ασφαλής έτσι όπως τη ζητάει η άσκηση. Χρειάζεται και 2ο όρισμα για το μέγιστο μήκος του name (το οποίο πρέπει να ενσωματωθεί κατόπιν στους ελέγχους ).