C ++:如何将字符串中的每个字符转换为相应的字符?

时间:2017-10-26 00:27:55

标签: c++ encryption key

我有一个用户输入的字符串string date(格式DD-MM-YYYY)我需要在此密钥后加密0 = W,1 = x,2 = 7,3 =%,4 = m,等等...

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

根据密钥,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;

1 个答案:

答案 0 :(得分:3)

您必须将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

的在线示例代码