C++ 使用switch语句进行加密

C++ 使用switch语句进行加密,c++,turbo-c++,C++,Turbo C++,我正在做一个加密程序,我的教授告诉我这个程序是正确的,但是我在switch语句中的逻辑是错误的,因为我一个接一个地输入了加密值。。我的教授希望我先把它放在一个变量中,然后在加密值上显示它。。请帮帮我 #include<iostream.h> #include<conio.h> #include<string.h> #include<windows.h> #include<cstdlib> main() { const char *st

我正在做一个加密程序,我的教授告诉我这个程序是正确的,但是我在
switch
语句中的逻辑是错误的,因为我一个接一个地输入了加密值。。我的教授希望我先把它放在一个变量中,然后在加密值上显示它。。请帮帮我

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<cstdlib>

main()
{
const char *stringlength;
char input[100];
int i;

cout<<"Input letters only:";
cin>>input;
stringlength=input;
cout<<"\nEncryption Value:";
for(i=0; i<strlen(stringlength); i++)
{

    switch(input[i])
    {
    case 'a':cout<<"0";break;
    case 'A':cout<<"1";break;
    case 'e':cout<<"2";break;
    case 'E':cout<<"3";break;
    case 'i':cout<<"4";break;
    case 'I':cout<<"5";break;
    case 'o':cout<<"6";break;
    case 'O':cout<<"7";break;
    case 'u':cout<<"8";break;
    case 'U':cout<<"9";break;
    case 'B':cout<<"C";break;
    case 'C':cout<<"D";break;
    case 'D':cout<<"E";break;
    case 'F':cout<<"G";break;
    case 'G':cout<<"H";break;
    case 'H':cout<<"I";break;
    case 'J':cout<<"K";break;
    case 'K':cout<<"L";break;
    case 'L':cout<<"M";break;
    case 'M':cout<<"N";break;
    case 'N':cout<<"O";break;
    case 'P':cout<<"Q";break;
    case 'Q':cout<<"R";break;
    case 'R':cout<<"S";break;
    case 'S':cout<<"T";break;
    case 'T':cout<<"U";break;
    case 'V':cout<<"W";break;
    case 'W':cout<<"X";break;
    case 'X':cout<<"Y";break;
    case 'Y':cout<<"Z";break;
    case 'Z':cout<<"A";break;
    case 'b':cout<<"c";break;
    case 'c':cout<<"d";break;
    case 'd':cout<<"e";break;
    case 'f':cout<<"g";break;
    case 'g':cout<<"h";break;
    case 'h':cout<<"i";break;
    case 'j':cout<<"k";break;
    case 'k':cout<<"l";break;
    case 'l':cout<<"m";break;
    case 'm':cout<<"n";break;
    case 'n':cout<<"o";break;
    case 'p':cout<<"q";break;
    case 'q':cout<<"r";break;
    case 'r':cout<<"s";break;
    case 's':cout<<"t";break;
    case 't':cout<<"u";break;
    case 'v':cout<<"w";break;
    case 'w':cout<<"x";break;
    case 'x':cout<<"y";break;
    case 'y':cout<<"z";break;
    case 'z':cout<<"a";break;
    default : cout<<"\nInvalid Character!\n"; break;
    }
}
getch();
return 0;
}
#包括
#包括
#包括
#包括
#包括
main()
{
常量字符*字符串长度;
字符输入[100];
int i;
库廷普特;
stringlength=输入;

CUT

使用C++的STD::string作为输出,并将每个循环字符添加到它中,而不是CUT

使用C++中的字符串流。

#include <sstream>
#include <string>
在开关情况下,如下所示:

case 'a':ss<<"0";break;
case 'A':ss<<"1";break;
case 'e':ss<<"2";break;
case 'E':ss<<"3";break;
case 'i':ss<<"4";break;
case 'I':ss<<"5";break;
case 'o':ss<<"6";break;
... 

案例“a”:ss您的教授可能正在寻找
字符输出[100]
。这与
字符输入[100]一样糟糕
,原因正如James Kanze所解释的,但你的教授似乎停留在上个世纪。这种代码是黑客的原因。

我从没想过我会在同一个标记列表中看到turboc++和c++11。你知道如何迭代数组吗?你知道如何将值放入数组吗?有什么问题吗?只是你用c通知我++你不会像在c中那样很快陷入麻烦,但你只允许在switch语句中放置16384
case
标签。(在c中,它的执行限制设置为1023)这并不意味着会让你太泄气,但这是一个非常糟糕的加密方案的非常糟糕的实现。除非分配是“学会使用<代码>开关<代码>语句”,你应该考虑使用数组查找替换字符。方法复杂度低,更容易阅读和修改(如“更改键”),并且更快。如果我的键盘上有一个粘着键,输入1000个代码>“A”/代码>(道德:不要使用<代码>字符[]。
对于这一点,但是
std::string
。即使我有一个2GB的
'a'
,它也会以可控的方式爆炸。)我修改了你的代码,使之稍微…更好。我希望你不介意。你的版本会在
ss
中的一个空格上被破坏。这真是
std::stringstream
的滥用(无论如何,这里应该是
std::ostringstream
)。
case 'a':ss<<"0";break;
case 'A':ss<<"1";break;
case 'e':ss<<"2";break;
case 'E':ss<<"3";break;
case 'i':ss<<"4";break;
case 'I':ss<<"5";break;
case 'o':ss<<"6";break;
... 
std::string output = ss.str(); 
cout << output << "\n";