Re: encryption problem
<dogatemycomputer@gmail.com> wrote in message...
I'm a newbie too so it took me a few minutes to realize what went
wrong with your code. I'm sure i'll get flamed (especially when the
blind is leading the blind) but i'm hoping someone will correct both
of us so we can do better next time.
Here is your code:
#include <iostream>
#include <string>
-----------------------------
Here are my thoughts:
#include <iostream>
#include <string.h>
using namespace std; // for pure laziness
// this should be a list of all possible characters that can be
converted
char decrypted[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// list of the corresponding converted text
char encrypted[27] = "ZYXWVUTSRQPONMLKJIHGFEDCBA"; file://encrypted key
char plain_text[80]; file://plain text string
char converted_text[80]; file://converted string for output
int string_length; // initialize the string
int main(){
cout << "text: "; // enter some text
cin >> plain_text; file://assign the array of text to plain_text
string_length = strlen(plain_text); file://find the length of the text
string entered by the user
for (int i=0; i<string_length; ++i){ // for the current character in
the string (i is the current character)
for (int j=0; j<(strlen(decrypted)); j++){ file://for the number of
possible decrypted characters
if (decrypted[j] == plain_text[i]){ file://if the current character
matches in the possible list of decrypted characters
converted_text[i] = encrypted[j]; file://then take the corresponding
encrypted character and assign it to the converted text string
}
}
}
cout << converted_text << "\n";
return 0;
}
------------------------
Here are my thoughts:
- i used a "decrypted" but incomplete list of possible characters
entered. Its probably a better idea to compare every character with
the entire list of ascii characters and output an offset (rather than
depending on a 1-to-1 translation on manually entered character list)
That shouldn't be too difficult.
See below.
- i'm not sure i'm adhering to any proper coding practices by using a
variable from one for-loop as a basis for comparison in a nested for
loop. Should these "constructs" (is that an appropriate word?) allow
mingling of variables?
The lines are so garbaged by your long comments, I don't feel like picking
it apart. If I understand what you were asking, I think the answer is "yes".
- should I move the for-loops and character comparisons to a function
outside of main()?
Why not. Everything else is outside of main()! (global vars bad!).
Any other critiques would be appreciated. Please keep in mind i'm a
newbie so additional explanation and examples would be helpful.
Thanks!
The OP included <string>, you should use that.
#include <iostream>
#include <string>
#include <algorithm>
int main(){
// - maintain one list -
std::string decrypted( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
// - copy and reverse the list -
std::string encrypted( decrypted );
std::reverse( encrypted.begin(), encrypted.end() );
std::cout<<encrypted<<std::endl;
std::cout<<"encrypted 9th char is:"
<<encrypted.at( 8 )<<std::endl; // zero based index
return 0;
} // main()
Now look up 'std::string find()', and use it with your first 'thought'
above.
Hint: you will NOT use nested loops in the encrypt/decrypt. Only 'scan' the
input string/c-string.
http://www.dinkumware.com/manuals/.
If you get stuck, post back here for help.
If you read this old thread, you may get some more ideas.
// - Original Message -
From: Protoman <Protoman2050@gmail.com>
Newsgroups: comp.lang.c++
Sent: Monday, July 02, 2007 8:00 PM
Subject: Any way to make this code more compact, and/or be able to change at
runtime?
But remember, I didn't tell you.
[ I don't want to get yelled at for doing someones homework/exercises. <G>]
--
Bob R
POVrookie