C ++错误的输出信

时间:2013-03-22 17:04:36

标签: c++

您好我有关于Caesar密码的新问题,例如

关键:3

平原:ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ

密码:DEFGĞHIİJKLMNOÖPRSŞTUÜVYZABCD

这些是土耳其字母“ç,ı,ğ,ö,ş,ü,Ç,İ,Ğ,Ö,Ş,Ü”

我需要进行加密和解密,程序不应该区分大小写。它应该像s = S,ç=Ç

你可以在下面看到我的程序,但我有一些问题

1)文本(普通)和密钥应由用户输入,但我无法做到。

2)char text [] =“DEF”;这个输入应该给(解密)“CÇD”,但它给出“CÃD”

通常它应该给出“Ç”而不是“Ô

我需要帮助:(

# include <iostream>
# include <cstring>

const char alphabet[] ={'A', 'B', 'C', 'Ç', 'D', 'E', 'F', 'G', 'Ğ', 'H', 'I',
                        'İ', 'J', 'K', 'L', 'M', 'N', 'O', 'Ö', 'P', 'R', 'S',
                        'Ş', 'T', 'U', 'Ü', 'V', 'Y', 'Z', '0', '1', '2', '3',
                        '4', '5', '6', '7', '8', '9', '.', ',', ':', ';', ' '};
const int char_num =44;

void cipher(char word[], int count, int key)
{
    int i = 0;
    while(i < count) {
        int ind = -1;
        while(alphabet[++ind] != word[i]) ;
        ind += key;
        if(ind >= char_num)
            ind -= char_num;
        word[i] = alphabet[ind];
        ++i;
    }
}

void decipher(char word[], int count, int key)
{
    int i = 0;
        while(i < count) {
        int ind = -1;
        while(alphabet[++ind] != word[i]) ;
        ind -= key;
        if(ind < 0)
            ind += char_num;
        word[i] = alphabet[ind];
        ++i;
    }
}


int main()
{
    char text[] = "ABC";
    int len = strlen(text);
    std::cout << text << std::endl;
    cipher(text, len, 2);
    std::cout << text << std::endl;
    decipher(text, len, 2);
    std::cout << text << std::endl;
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

此问题是您的程序使用的编码与控制台所需的编码不同。 Windows默认以这种方式配置;程序使用像cp1252或cp1254这样的编码,控制台需要像cp437这样的其他东西。

Here's来自Microsoft开发人员的一篇文章解释了为什么会这样。

网上已有大量信息,涵盖了解决编码不匹配的众多方法。