C++ 是否可以将ASCII控制字符存储在字符串中?
我正在为我的学校作业编写凯撒移位密码,但在实现ASCII环绕功能时遇到了问题。问题是当移位发生在ASCII范围[0127]之外时。我目前认为移位128的结果是%的,这基本上围绕着ASCII表。但是,值0-31是控制字符,未正确存储在字符串中。这使我无法解密字符串。我是否应该使用特定的数据结构来保留ASCII表中的所有字符 这是我的密码:C++ 是否可以将ASCII控制字符存储在字符串中?,c++,encryption,caesar-cipher,C++,Encryption,Caesar Cipher,我正在为我的学校作业编写凯撒移位密码,但在实现ASCII环绕功能时遇到了问题。问题是当移位发生在ASCII范围[0127]之外时。我目前认为移位128的结果是%的,这基本上围绕着ASCII表。但是,值0-31是控制字符,未正确存储在字符串中。这使我无法解密字符串。我是否应该使用特定的数据结构来保留ASCII表中的所有字符 这是我的密码: std::string shift(const std::string& str) { int shift_pos = 9; char
std::string shift(const std::string& str) {
int shift_pos = 9;
char original_str[str.length()];
char encrypted_str[str.length()];
std::strcpy(original_str, str.c_str());
for (int i = 0; i < str.length(); i++) {
encrypted_str[i] = (original_str[i] + shift_pos) % 128;
}
return encrypted_str;
}
std::string移位(const std::string&str){
int shift_pos=9;
char-original_str[str.length()];
字符加密的字符串[str.length()];
std::strcpy(原始str,str.c_str());
对于(int i=0;i
您的代码中有两个错误:
std::strcpy(original_str, str.c_str());
strcpy
函数用于C样式字符串。在此处使用memcpy
return encrypted_str;
这个return
语句调用的std::string
的构造函数应该如何知道字符串的长度?采用char*
的std::string
构造函数仅适用于C样式的字符串。显式调用构造函数并将长度传递给它
如果您解决了这两个问题,您的字符串应该能够正确处理您想要存储在其中的任意垃圾。不要使用任何用于具有任意数据的C样式字符串的函数。为什么
QTString
而不是std::string
?我希望在这里的某个地方看到%26
,而不是%128
@tadman,因为这是作业的要求。之所以是128,是因为ascii表中有128个值,因此如果该值超出ascii范围3,则该值应编码为STX字符,因为这是ascii表中的第三个值。提示:它不是128。这个数字与凯撒密码毫无关系,凯撒密码在7位ASCII之前已经存在很长时间了。有多少个字母?如果字符串包含像“@$%”这样的非字母数字字符怎么办?