Jim Langston wrote in message...
"Protoman" <Protoman2...@gmail.com> wrote in message...
char Enigma::plugboard(char Char){
}
If you need any more info, just ask and I'll produce it. Thanks!!!!
I can think of a few ways to do it more compact. a std::map would be one
way, although you'd still have to add the members to the map. I think it
depends on what is your primary concern, speed of execution or
maintanability. One simple thing, however, is that you only have the
letters 'A' through 'Z' and the digits '0' through '9'.
Consider something like the following (untested bug ridden) code:
char Enigma::plugboard(char Char)
{
char Vallues* = "0QWEDTYU'I'OPSNMJKBZLFHXCVGRA987654321"
if ( Char >= 'A' && Char <= 'Z' )
return Values[Char - 'A'];
else if ( Char >= '0' && Char <= '0' )
return Values[ 26 + Char - '0' ];
else
return 0;
)
However, this will only work on platforms where 'A' through 'Z' and '0'
through '9' are contiguous (ASCII, wouldn't work in EBSIDIC (sp?) ).
You can also create an array to find the postion:
char Characters* = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
so find the Char in Characters, get it's postion, return Values[Position];
Now, this is more compact, and you can change what Values points at (make
it
array, pass in a pointer, whatever).
Take it a step further, maybe:
char plugboard( char Char ){
std::string Values
( "0QWEDTYUIOPSNMJKBZLFHXCVGRA987654321" );
std::string Characters
( "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" );
std::size_t index( Characters.find( Char ) );
if( std::string::npos == index ){ return ' ';}
return Values.at( index );
} // plugboard(char)
{ // main or ?
std::string Vals( "NOWISTHETIMEFOR2007" );
// std::string Vals( "NOW IS THE TIME FOR 2007" );
std::cout<<"Vals:\n"<<Vals<<std::endl;
for( std::size_t i(0); i < Vals.size(); ++i){
std::cout<< plugboard( Vals.at(i) );
}
} // main()
/* Vals:
NOWISTHETIMEFOR2007
MJCILFUDFINDTJZ8AA3
NOW IS THE TIME FOR 2007
MJC IL FUD FIND TJZ 8AA3
*/
--
Bob R
POVrookie- Hide quoted text -
- Show quoted text -