Code:
#include<stdio.h>
bool __cdecl Increment( char* lpToken, unsigned long dwLen )
{
char* pStart = lpToken;
lpToken = &lpToken[ dwLen ];
do
{
switch ( ++lpToken[ 0 ] )
{
case 'Z'+1:
lpToken[0] = 'a';
return 1;
break;
case 'z'+1:
lpToken[0] = '0';
return 1;
break;
case '9'+1:
lpToken[0] = 'A';
break;
default:
return 1;
}
lpToken--;
} while ( lpToken >= pStart );
return 0;
}
int main( void )
{
char szString[ 10 ];
unsigned long dwLength = 1;
*(unsigned short*)(szString) = 'A'; // unsigned short so we can copy the sz null.
for ( unsigned long i = dwLength - 1; i < sizeof( szString ) -1; i++ )
{
do
{
printf( "%s\n", szString );
//getchar( ); // uncomment to pause inc display.
} while ( Increment( szString, dwLength -1 ) );
*(unsigned short*)(szString+dwLength++) = 'A'; // ''
}
return 0;
}
credits to a helpful guy at another forum.
Quote:
|
Originally Posted by TheUmbra
For optimization you will need to remove the excessive branching in Increment().
|