我有几个问题:
我只是制作了一个简单的键控密码......只是在玩耍来学习cpp。我知道java所以,如果你能与之相关,那就太棒了!
这是我的代码所以请告诉我如何改进...谢谢! :)
#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;
}
答案 0 :(得分:2)
如何从字符串中获取某个字符?
通过使用索引运算符。 string::operator[]
如何获取int的字符?
int charToInteger = stringName[i] ;
如何将字符串附加到字符串?
从链接 -
的字符串&安培;追加(size_t n,char c);
追加由字符c重复n次形成的字符串。
答案 1 :(得分:0)
首先使用字符串:const char& operator[] ( size_t pos ) const;
例如:
char tmp = encrypted[x];
对于转换,您只需使用C风格的转化:
int tmp = (int)encrypted[x];
只要你使用sizeof(char) <= sizeof(int)
的架构(例如德州仪器的一些计算器:),这通常就可以了。
但是,在您的代码中,您可以使用字符进行操作,因为字符也可以用作数字类型。
将char附加到字符串的最简单方法是使用+ =:
string s = "Hello worl";
s += 'd';
答案 2 :(得分:0)
string s = "foo"; char c=s[1];
char c = 'a'; int i = c;
int i = 65; char c = (char) i;
string s = "foo"; char c = 'X'; s += c;
for (int x = 0; x < sizeof(data); x++)
不起作用 - 使用data.size()
而不是sizeof(data)
int tmp = static_cast<int>(data.substr(x));
也不起作用。如果您希望data[x]
的ascii值只执行int tmp = data[x];
if (index > sizeof(pass))
无法使用 - 您需要使用pass.size()
最后,你永远不会在循环中增加index
,并返回错误的字符串。
#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
}
答案 3 :(得分:0)
类“string”实现operator [],因此要获得“i”char,可以使用mystring [i]。 std :: string有一个名为“c_str()”的函数,它返回字符串中的“const char *”。 所以另一种从std :: string获取char的方法是*(mystring.c_str()+ i)。
如何获取int的字符? char是一个1字节的数据类型,因此您可以像在java中一样将char转换为int。
char c ='a'; int i =(int)c;
如何获得char的int?
就像在Java中一样。注意int通常是4个字节(不一定是4个字节!!!),所以你可能会丢失数据,因为char是1个字节。
int i=0xFFFF
char c = (char)i;
c is 0xFF! lost some data!
std :: string实现operator + =所以你可以使用它。