Δημοσιεύτηκε: 16 Φεβ 2012, 00:16
- Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define pressENTER() \
do{ \
char mYcHAr; \
printf( "press ENTER..." ); \
while ( (mYcHAr=getchar()) != '\n' && mYcHAr != EOF ) \
; \
}while(0)
/*********************************************************//**
*
************************************************************/
int s_swap( char **s1, char **s2 )
{
char *temp = NULL;
if ( !s1 || !s2 )
return 0; /* FALSE */
temp = *s1;
*s1 = *s2;
*s2 = temp;
return 1; /* TRUE */
}
/*********************************************************//**
*
************************************************************/
int s_swap_static( char *s1, char *s2, const int maxlen )
{
char *temp = NULL;
size_t size = maxlen * sizeof(char);
if ( !s1 || !s2 || maxlen < 1 || NULL == (temp=malloc(size)) )
return 0; /* FALSE */
memcpy(temp, s1, size);
memcpy(s1, s2, size);
memcpy(s2, temp, size);
free( temp );
return 1; /* TRUE */
}
/*********************************************************//**
*
************************************************************/
#define myMAX(x,y) ( (x) > (y) ? (x) : (y) )
int s_swap_static2( char *s1, char *s2 )
{
char *temp = NULL;
size_t size = 0;
if ( !s1 || !s2 )
return 0; /* FALSE */
size = myMAX(strlen(s1), strlen(s2)) * sizeof(char);
if ( NULL == (temp = malloc(size)) )
return 0; /* FALSE */
memcpy(temp, s1, size);
memcpy(s1, s2, size);
memcpy(s2, temp, size);
free( temp );
return 1; /* TRUE */
}
/*********************************************************//**
*
************************************************************/
int s_swap_static3( char *s1, char *s2 )
{
char c = '\0', *cp = NULL;
int i = 0;
if ( !s1 || !s2 )
return 0; /* FALSE */
for (i=0; s1[i] && s2[i]; i++)
{
c = s1[i];
s1[i] = s2[i];
s2[i] = c;
}
if ( '\0' != *(cp = &s1[i]) ) {
while ( s1[i] )
s2[i] = s1[i++];
*cp = '\0';
}
else if ( '\0' != *(cp = &s2[i]) ) {
while ( s2[i] )
s1[i] = s2[i++];
*cp = '\0';
}
return 1; /* TRUE */
}
/*********************************************************//**
*
************************************************************/
int main( void )
{
/* string literals */
char *s1 = "str1long";
char *s2 = "str2";
/* static strings of same max length */
char t1[ 80+1 ] = "str1long";
char t2[ 80+1 ] = "str2";
/* swap string literals */
puts("\nBEFORE s_swap():");
printf("\ts1 = %s\n\ts2 = %s\n", s1, s2 );
if ( !s_swap(&s1, &s2) )
puts("*** s_swap() failed!");
puts("AFTER:");
printf("\ts1 = %s\n\ts2 = %s\n", s1, s2 );
/* Method 1: swap static strings of same max length */
puts("\nBEFORE s_swap_static():");
printf("\tt1 = %s\n\tt2 = %s\n", t1, t2 );
if ( !s_swap_static(t1, t2, 80+1) )
puts("*** s_swap_static() failed!");
puts("AFTER:");
printf("\tt1 = %s\n\tt2 = %s\n", t1, t2 );
/* Method 2: swap static strings of same max length */
puts("\nBEFORE s_swap_static2():");
printf("\tt1 = %s\n\tt2 = %s\n", t1, t2 );
if ( !s_swap_static2(t1, t2) )
puts("*** s_swap_static2() failed!");
puts("AFTER:");
printf("\tt1 = %s\n\tt2 = %s\n", t1, t2 );
/* Method 3: swap static strings of same max length */
puts("\nBEFORE s_swap_static3():");
printf("\tt1 = %s\n\tt2 = %s\n", t1, t2 );
if ( !s_swap_static3(t1, t2) )
puts("*** s_swap_static3() failed!");
puts("AFTER:");
printf("\tt1 = %s\n\tt2 = %s\n", t1, t2 );
pressENTER();
exit( EXIT_SUCCESS );
}