2013-10-01 3 views
0

Я делаю программу шифрования, мой профессор сказал мне, что эта программа верна, но моя логика в заявлении switch неверна из-за ввода значения шифрования один за другим .. мой профессор хочет меня поместить его в переменную первого затем отобразить его на значение шифрования .. пожалуйста, помогите мне ..Шифрование с использованием оператора 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; 
} 

что я могу сделать с этим? мой намек в том, что мне нужна переменная, где я могу поместить все значение шифрования текста, а затем cout все сразу.

+7

Никогда не думал, что я увижу turboC++ и C++ 11 в том же списке тегов. – StoryTeller

+0

Знаете ли вы, как перебирать массив? Вы знаете, как поместить значения в массив? В чем проблема? – Beta

+0

Просто, чтобы вы уведомили, в C++ вы не будете так быстро входить в проблему, как в c, но вам просто разрешено помещать метки 16384 'case' в оператор switch. (В C предел реализации для него установлен в 1023) – dhein

ответ

1

Используйте строку C++ std :: при выводе и добавьте к ней каждый символ. Вместо cout < < 'c' использовать str + = 'c'; Затем просто выгрузите всю строку.

1

Использовать струнные потоки в C++.

#include <sstream> 
#include <string> 

Поместите это в ваших основных объявлений функций:

std::stringstream ss; 

Следуя переключатель корпуса:

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"; 
+0

Я изменил ваш код, чтобы немного ... лучше. Надеюсь, ты не против. Ваша версия будет разбита на пробел в 'ss'. – rubenvb

+0

Спасибо @rubenvb –

+1

Это действительно злоупотребление 'std :: stringstream' (в любом случае это должно быть' std :: ostringstream'). –

0

Ваш профессор, вероятно, ищет char output[100]. Это примерно так же плохо, как char input[100], по причинам, которые объяснил Джеймс Канзе, но ваш профессор кажется застрявшим в прошлом веке. Этот тип кода является причиной хакеров.

Смежные вопросы