开发者

How do you do change from one variable to another?

I have a few questions:

  1. How do you get a certain char from a string?
  2. How do you get a char to a int?
  3. How do you get a int to a char?
  4. How do you append a char to a string?

I was just making a simple keyed cipher... just playing arou开发者_如何转开发nd to learn cpp. I do know java so if you could relate to that it would be great!

Here is my code so please tell me how to improve... thanks! :)

#include <string>

using namespace std;

string encrypt(string data, string pass) {
    // Use a Keyed Cipher //
    string encrypted;
    int index = 0;
    for (int x = 0; x < sizeof(data); x++) {
        int tmp = static_cast<int>(data.substr(x));
        int tmpPass = static_cast<int>(pass.substr(index));
        tmp += tmpPass;

        if (tmp > 126) {
            tmp -= 95;
        }

        if (index > sizeof(pass)) {
            index = 0;
        }
        encrypted += static_cast<char>(tmp);
    }
    return data;
}


How do you get a certain char from a string?

By using index operator. string::operator[]

How do you get a char to a int?

int charToInteger = stringName[i] ;

How do you append a char to a string?

Using string::append

From the link -

string& append ( size_t n, char c );
Appends a string formed by the repetition n times of character c.


First of all with a string: const char& operator[] ( size_t pos ) const; e.g.:

char tmp = encrypted[x];

For conversion, you can just use C-style conversions:

int tmp = (int)encrypted[x];

This should generally work, as long as you're using an architecture with sizeof(char) <= sizeof(int) (e.g. some Texas Instruments calculators :)

But, in your code, you can just operate with chars, because chars can also be used as numeric types.

The easiest way to append a char to string is using += :

string s = "Hello worl";
s += 'd'; 


  1. How do you get a certain char from a string?

the class "string" implements the operator [], so to get the "i" char you can use mystring[i]. std::string has a function called "c_str()" which returns "const char*" that is inside the string. so another way to get a char from a std::string is *(mystring.c_str()+i).

  1. How do you get a char to a int? char is a 1 byte data type, so you can cast char into an int just like in java.

    char c = 'a'; int i = (int)c;

  2. How do you get a int to a char?

just like in Java. notice that int is usually 4 bytes (doesn't have to be 4 bytes!!!), so you might lose data because char is 1 byte.

int i=0xFFFF
char c = (char)i;
c is 0xFF! lost some data!
  1. How do you append a char to a string?

std::string implements operator += so you can use it.


  1. string s = "foo"; char c=s[1];
  2. char c = 'a'; int i = c;
  3. int i = 65; char c = (char) i;
  4. string s = "foo"; char c = 'X'; s += c;

for (int x = 0; x < sizeof(data); x++) won't work - use data.size() not sizeof(data)

int tmp = static_cast<int>(data.substr(x)); won't work either. If you want the ascii value of data[x] just do int tmp = data[x];

if (index > sizeof(pass)) won't work - you need to use pass.size()

And finally, you never increase index within the loop, and you return the wrong string.

#include <string>

using namespace std;

string encrypt(string const & data, string const & pass) { // Pass arguments by const reference, not as values which are copied
    // Use a Keyed Cipher //
    string encrypted;
    int index = 0;
    for (int x = 0; x < data.size(); ++x) { // Loop over the length of the string, not the size of the string object
        int tmp = data[x]; // No need to cast
        int tmpPass = pass[index]; // No need to cast
        tmp += tmpPass;

        if (tmp > 126) {
            tmp -= 95;
        }
        ++index; // Remember to loop over the password as well
        if (index >= pass.size()) { // Check against length of string, not size of object
            index = 0;
        }
        encrypted += static_cast<char>(tmp);
    }
    return encrypted; // Return the encrypted string
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜