Portál AbcLinuxu, 13. července 2025 11:37
Zajimalo by me jestli je mozne binarne prohazovat retezce(respektive znak po znaku). Je mozne prohodit int a i char. Pouzil jsem notoricky zname makro
#define SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))
Ale dostal jsem se do ouzkych. Pokud SWAP zavolam s char
tak to vubec neni problem a bitove to prohodi. Ale problem number one je.
char* str_reverse( char* str )
{
assert( str != NULL );
char *result = NULL;
result = str_init( str );
unsigned int len = strlen( result );
unsigned int loop = len >> 1;
for( int i = 0; i < loop; i++ ){
if( i == loop )
break;
SWAP( result[i], result[len-i]);
}
return result;
}
for (int i = 0; i < loop; i++) { SWAP(result[i], result[len-1-i]); }
t1 = a; t2 = b; a = t2; b = t1;vyzaduje pouze dva tiky na rozdil od kodu:
a ^= b; b ^= a; a ^= b;ktery vyzaduje VZDY tri tiky, protoze kazdy prikaz je zavisly na predchozim. Jinak staci to rozepsat na
t = a; a = b; b = t;
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.