Δημοσιεύτηκε: 11 Ιούλ 2011, 09:35
από migf1
Πρόγραμμα που διαβάζει ένα string, το αντιστρέφει και το τυπώνει...
Κώδικας: Επιλογή όλων

/* --------------------------------------------------------------
* Από: migf1
* Διάβασμα ενός string, αντιστροφή του και τύπωμά του στην οθόνη
* --------------------------------------------------------------
*/

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

// ------------------------------------------------------------------------------------
// Διαβάζει έως len-1 χαρακτήρες ή μέχρι να πατηθεί ENTER και τους αποθηκεύει στο string
// s. Επιστρέφει το s χωρίς το ENTER και με μηδενισμένο τον τελικό χαρακτήρα
//
char *s_get(char *s, size_t len)
{
char *cp;

for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
; // for-loop with empty body
*cp = '\0'; // null-terminate last character

return s;
}

// ------------------------------------------------------------------------------------
// Αντιστρέφει το string s. Βάζει από έναν δείκτην στην αρχή και το τέλος του s, κι
// εναλλάσει τους χαρακτήρες τους μέχρι να συναντηθούν οι δυο δείκτες στη μέση του s
// ΣΗΜΑΝΤΙΚΟ: το s πρέπει να είναι ήδη δημιουργημένο.
//
char *s_reverse(char *s)
{
if ( !s ) // early exit
return NULL;

char *cp1, *cp2, dummy;

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

return s;
}

// ----------------------------------------------------------------------------------------
int main( void )
{
char s[255+1];

printf("Enter a string: ");
s_get(s, 256);
printf("Your string revesred is:\n\t%s", s_reverse(s) );

fflush(stdin); getchar();
exit( EXIT_SUCCESS );
}



Έχω μια ακόμα άσκηση, την οποία μάλιστα την ζητούσαν πολλοί σε job-interviews: γράψτε ένα πρόγραμμα που διαβάζει μια πρόταση και αντιστρέφει τις λέξεις της. Π.χ. η πρόταση "γειά σου κόσμε" γίνεται: "κόσμε σου γεια".

Θέλετε να την προσπαθήσετε πρώτα μόνοι σας ή να δώσω απευθείας μια από τις πιθανές της λύσεις;