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” 通常,它应该给出“Ô而不是“Ô 我需要帮助:(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” 通常,它应
#包括
#包括
常量字符字母表[]={'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;
}