C++ C++;输出错误的字母

C++ C++;输出错误的字母,c++,C++,你好,我有一个关于凯撒密码的新问题 关键词:3 平原:ABCĞDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ 密码:DEFGĞHIİJKLMNOÖPRSŞTUÜVYZABCD 这些是土耳其字母“ç,ı,ğ,ö,ş,ü,İ,Ğ,Ş,Ü” 我需要加密和解密,程序不应该区分大小写。它应该像s=s,ç=ç 你可以在下面看到我的程序,但我有一些问题 1) 文本(纯文本)和密钥应由用户输入,但我不能这样做 2) 字符文本[]=“DEF”;此输入应给出(用于解密)“CÇD”,但它给出“CÃD” 通常,它应

你好,我有一个关于凯撒密码的新问题

关键词:3

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

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

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

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

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

1) 文本(纯文本)和密钥应由用户输入,但我不能这样做

2) 字符文本[]=“DEF”;此输入应给出(用于解密)“CÇD”,但它给出“CÃD”

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

我需要帮助:(

#包括
#包括
常量字符字母表[]={'A','B','C','ch','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', '.', ',', ':', ';', ' '};
常量int char_num=44;
无效密码(字符字[],整数计数,整数键)
{
int i=0;
而(我<计数){
int ind=-1;
而(字母[++ind]!=单词[i]);
ind+=键;
如果(ind>=char\u num)
ind-=字符数;
单词[i]=字母表[ind];
++一,;
}
}
无效解密(字符字[],整数计数,整数键)
{
int i=0;
而(我<计数){
int ind=-1;
而(字母[++ind]!=单词[i]);
ind-=键;
if(ind<0)
ind+=字符数;
单词[i]=字母表[ind];
++一,;
}
}
int main()
{
字符文本[]=“ABC”;
int len=strlen(文本);

std::cout这个问题是您的程序使用的编码与控制台期望的编码不同。默认情况下,Windows是以这种方式配置的;程序使用cp1252或cp1254等编码,而控制台期望cp437等其他编码

一篇来自微软开发人员的文章解释了这一点


在线上已经有很多信息介绍了修复编码不匹配的多种方法。

这个问题是您的程序使用的编码与控制台期望的编码不同。默认情况下,Windows是以这种方式配置的;程序使用cp1252或cp1254等编码,而控制台期望cp437等其他编码。

一篇来自微软开发人员的文章解释了这一点


网上已经有很多信息介绍了修复编码不匹配的多种方法。

“1)文本和密钥应由用户输入,但我可以输入,因为我一直给出错误”问题不在于代码。问题在于您打印到的控制台没有设置为处理Unicode字符。字符的Unicode值为199,但在DOS 199中打印为Ã。是的,“简单解决方案”将本地代码页设置为告诉编译器输入和输出都应该是代码页1254,然后告诉所有用户在运行代码之前将本地代码页设置为代码页1254。显然,“简单解决方案”这是一个坏主意。我是编程新手,所以这些评论对我来说很奇怪。我该如何处理1254:D。“1)文本和键应由用户输入,但我可以输入,因为我一直给出错误”问题不在于代码。问题在于您打印到的控制台没有设置为处理Unicode字符。字符的Unicode值为199,但在DOS 199中打印为Ã。是的,“简单解决方案”将本地代码页设置为告诉编译器输入和输出都应该是代码页1254,然后告诉所有用户在运行代码之前将本地代码页设置为代码页1254。显然,“简单解决方案”这是一个坏主意。我在编程方面很新,所以这些评论对我来说很奇怪。我应该如何处理1254:D。我是初学者,所以我不能得到你的意思是CP1254:(我需要使用或获取土耳其的收藏夹,使用C++代码。我是初学者,所以我不能得到你的意思是CP1254:(我需要使用或使用C++代码获得土耳其人。)
# 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;
}