【问题标题】:C++: How do I convert each char in a string into a corresponding character?C++:如何将字符串中的每个字符转换为相应的字符?
【发布时间】:2023-03-16 11:33:01
【问题描述】:

我有一个用户输入的字符串 string date(格式 DD-MM-YYYY),我需要按照这个密钥 0=W、1=x、2=7、3=%、4=m 等对其进行加密上...

当我输入以下 12-06-1983 时,这是我得到的输出 012FFAD8 - 这是错误的

根据key,12-06-1983的输出应该是x7dW#dx&4%

以下是我的代码,请帮我找出错误。 此外,我是否以正确的方式解决这个问题?有没有更简单的方法来做到这一点? 请记住,这是我的 C++ 课程中的初学者作业。

string key = date;
string encryptedKey[10];

        for (int i = 0; i < key.length(); i++) {

            if (key[i] == '0' ) {
                encryptedKey[i] = 'W';
            }
            else if (key[i] == '1') {
                encryptedKey[i] = 'x';
            }
            else if (key[i] == '2') {
                encryptedKey[i] = '7';
            }
            else if (key[i] == '3') {
                encryptedKey[i] = '%';
            }
            else if (key[i] == '4') {
                encryptedKey[i] = 'm';
            }
            else if (key[i] == '5') {
                encryptedKey[i] = 'G';
            }
            else if (key[i] == '6') {
                encryptedKey[i] = '#';
            }
            else if (key[i] == '7') {
                encryptedKey[i] = 'P';
            }
            else if (key[i] == '8') {
                encryptedKey[i] = '4';
            }
            else if (key[i] == '9') {
                encryptedKey[i] = '&';
            }
            else if (key[i] == '-') {
                encryptedKey[i] = 'd';
            }
            else {
                cout << "\nError.\n";
            }
        }

cout << encryptedKey;

【问题讨论】:

  • encryptedKey 不应该是字符串数组。
  • @John3136 谢谢。
  • switch 的可读性更强,表格查找也更易读。

标签: c++ encryption key


【解决方案1】:

您必须将 string encryptedKey[10] 替换为 string encryptedKey = "0000000000"; 并且您的代码可以正常工作。它不聪明,但很有效。

最好使用嵌套的 if 语句使用 switch-case。

在您的代码中,不需要 if 或 switch-case。只需使用地图来翻译您的输入字符串。

string key = "12-06-1983";
string encryptedKey = "";
map<char, char> replacements = {
    { '0', 'W' },
    { '1', 'x' },
    { '2', '7' },
    { '3', '%' },
    { '4', 'm' },
    { '5', 'G' },
    { '6', '#' },
    { '7', 'P' },
    { '8', '4' },
    { '9', '&' },
    { '-', 'd' }
};
for (int i = 0; i < key.length(); i++) {
    encryptedKey += replacements.at(key[i]);
}

cout << "Key: " << encryptedKey;

映射定义了哪个字符要替换为哪个其他字符。现在只需遍历输入并查找应该将哪个字符放置在 encryptedKey 中而不是给定的映射。

这是cpp.sh的在线示例代码

【讨论】:

  • 这对我帮助很大。感谢您抽出宝贵时间输入此内容。
  • 如何添加错误异常?例如,如果key 包含非法字符,例如Q,而不是数字。我会在这段代码之外还是在地图函数内部做呢?
  • 它已经在里面了:如果键没有存储在映射中,映射对象的at 方法会抛出异常!如果您想处理它,您只需捕获 out of range 错误。
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多