Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
arigatu
1 / 1 / 0
Регистрация: 06.12.2012
Сообщений: 12
#1

С++ шифр цезаря, пожалуйста, 5ый час бьюсь - C++

06.12.2012, 11:48. Просмотров 420. Ответов 0

Доброго времени суток всем! Помогите пожалуйста! никак не пойму, что нужно сделать и как это реализовать
https://github.com/Markoutte/pla3-eltech вот ссылка на задание, а вот мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <string.h>
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <getopt.h>
#include <vector>
#define _Z 'z'
#define _A 'a'
using namespace std;
string input;
int shift;
int length;
void codeString(){
   for (int i = 0; i < length; i++){
        if (isalnum(input[i])){
           input[i] = tolower(input[i]);
           for (int j = 0; j < shift; j++){
               if (input[i] == _Z){
                  input[i] = _A;
               }
               else
               input[i]++;
           }
        }
    }
}
void printString(){
cout << "\nResult:  " << input << endl;
}
void getString (){
    char* doc = new char;
    cout << "Enter FILENAME: ";
    cin >> doc;
    ifstream str(doc);
    if (str.fail()){
       cout << "Can't open file: " << doc << endl;
       system("pause");
       exit(1);
    }
    delete doc;
    while (getline(str, input));
    length = (int)input.length();
}
int main(){
    getString();
    cout << "Enter SHIFT: ";
    cin >> shift;
    codeString();
printString();
    system("pause");
    return 0;
}
Каким образом добиться того, чтобы программа запусказалась из командной строки при помощи параметров, указанных в задании?

ИЛИ есть вариант переписать код, найденный в интернете, но этот код очень хитрый P.S. Тому, кто поможет переписать код, могу кинить 100руб на интернет-кошелек, просто необходимо сдать программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <string.h>
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <getopt.h>
#include <vector>
 
using namespace std;
//функция для вывода помощи
void printHelp()
{
    printf ("%s\n","$ crypt [options] <key> <source> [<dest>]");
    printf ("%s\n","options:");
    printf ("%s\n","-a, alphabet=<alphabet>  alphabet — алфавит для работы алгоритма (по умолчанию содержит буквы из латниского алфавита и цифры: AaBbCc..Zz0..9)");
    printf ("%s\n","-t, type=<type>          type может быть 'encode' или 'decode', по умолчанию — encode");
    printf ("%s\n","-h, help                 выводит эту справку");
    printf ("%s\n","key:");
    printf ("%s\n","ключ для шифрования/дешифрования");
    printf ("%s\n","source:");
    printf ("%s\n","исходный файл для шифрования/дешифрования");
    printf ("%s\n","dest:");
    printf ("%s\n","файл, куда будет записан новый, зашифрованный текст. Если не указан, то переписывает source");
}
//function printing error by code
void printError(int code)
{
    switch(code)
    {
        case 1: printf("%s\n", "Invalid options"); break;
        case 2: printf("%s\n", "Wrong key, or invalid source");break;
        case 3: printf("%s\n", "File doesnt exist");break;
        default : printf("%\ns", "Error, what are you doing? Try -h"); break;
    }
}
 
int main(int argc, char *argv[])
{
    //if too many or not too much parameters call error
    if (argc<2||argc>8)
    {
        printError(1);
        return 0;
    }
    //what we do with file:
    //0 - encode, 1 - decode, by default - encode
    bool type = 0;
    //special alphabet, default value is /0
    string alphabet = "/0";
    //next variables, use in getopt_long
    //structure that determine options
    const struct option longOptions[] =
    {
        //long option return his short analogue
        {"alphabet", required_argument, NULL, 'a'},
        {"type", required_argument, NULL, 't'},
        {"help", no_argument, NULL, 'h'},
        {NULL,0,NULL,0}
    };
    //variable determine short options
    const char * shortOptions = "a:ht:";
    int longIndex;
    int option;
    //while all options isnt check, finding options
    while ((option = getopt_long(argc, argv, shortOptions, longOptions, &longIndex)) != -1)
    {
        switch (option)
        {
            //if user need help print it, close program
            case 'h':printHelp();return 0; break;
            case 't':
                        {
                            //if type is decode type = TRUE, else if type isnt encode call error
                            if (strcmp(optarg, "encode")==0||strcmp(optarg, "decode")==0)
                            type = strcmp(optarg, "decode")==0;
                            else {printError(1); return 1;} break;
                        }
            case 'a':
                        {
                            //if using special alphabet put it in alphabet variable
                            if(optarg != NULL) alphabet = optarg;
                            else {printError(1); return 1;} break;
                        }
        }
    }
        //if number of options is 1, and help
        //isnt close program above, close program
        if (argc==2) {printError(1); return 1;}
        //imagine that options contain destination path, source and key
        char * dest = argv[argc-1];
        char * source = argv[argc-2];
        char * key = argv[argc-3];
        //if we have key, call error
        if ((atoi(source)==0)&&(atoi(key)==0))
        {
            printError(1);
            printf("\n");
            printError(2);
            return 2;
        }
   //key == padding
int padding;
atoi(key)==0 ? padding = atoi(source):padding = atoi(key);
   //check key is not negative value
if (padding<0) {printError(2);return 0;}
   //if need decode make key negative
type == 1 ? padding = padding*(-1):0;
 
char *inputName = source;
char *outputName = dest;
   //if we havent destination save in the same file
if (atoi(key)==0)
{
inputName = outputName;
}
 
FILE *input,*output;
input = fopen(inputName, "rb");
 
if (input == NULL) {printError(3); return 3;}
char lib;
   //buffer contain input file
vector <char> buffer;
   //checking alphabet
   //return: 0 - no special alphabe, 1 - use special
bool specAlphabet = (alphabet != "/0");
   //reading file and apply crypting
while (!feof(input))
{
fread (&lib ,sizeof(char) , 1, input);
if (feof(input)) break;
        //if using special alphabet, and current letter
        //should not change go to the next
if (specAlphabet&&alphabet.find(lib,0)==-1) {buffer.push_back(lib); continue;}
        //type is character range by code
int type = -1;
        // character in 0..9 range
lib >= 48 ? type++:0;
        //A..Z
lib >= 65 ? type++:0;
        //a..z
lib >= 97 ? type++:0;
        //keep only letters or digits and crypt
switch (type)
{
            //encode formula:
            // y == (x + k) % n
            //decode formula:
            //x = = (y - k + n) % n
case 0: lib <= 57 ? lib =48+(int(lib)-48+padding+10*type)%10 : 0;break;
case 1: lib <= 90 ? lib =65+(int(lib)-65+padding+26*type)%26 : 0;break;
case 2: lib <= 122 ? lib =97+(int(lib)-97+padding+26*type)%26 : 0;break;
}
buffer.push_back(lib);
    }
    fclose(input);
    output = fopen(outputName, "wb");
    int size = (int) buffer.size();
    for (int i =0;i < size; i++) fwrite(&buffer[i],sizeof(char),1,output);
   return 0;
}
Добавлено через 11 часов 6 минут
хоть кто-нибудь, помогите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 11:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С++ шифр цезаря, пожалуйста, 5ый час бьюсь (C++):

Шифр Цезаря - C++
Объясните пожалуйста есть формула для шифра Цезаря :En(x) = (x +n)mod26 почему в коде надо еще отнять 65, а потом прибавить. 65- это код...

Шифр Цезаря - C++
text - исходный code - закодированный decode - дешифрованный после компиляции в файл code в конец ложится пробел, откуда он...

Шифр цезаря - C++
Столкнулся с такой проблемой нужно &quot;Разработать прикладное приложение для шифрования текста с помощью шифра простой замены. Приложение...

C++ Шифр Цезаря - C++
Help нужно написать программу на С++, которая шифрует русские и английские слова. Делает запрос на сдвиг. Зашифрованный код переводил...

Шифр Цезаря - C++
Ребята , помогите решить задачку, битый час сижу, не могу понять . Надо чтобы введенная буква алфавита сдвигалась на 3 буквы вперед...

Шифр Цезаря - C++
Вот есть готовый код программы, может, кому понадобиться:) #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; using namespace...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 11:48
Привет! Вот еще темы с ответами:

Шифр Цезаря - C++
Добрый вечер, не могу реализовать шифр цезаря на C builder, программа компилится нормально, но при нажатии на кнопку выдаёт ошибку. Вот код...

Шифр Цезаря - C++
есть код программы для взлома Шыффра Цэзара но никак немогу доделать ее чтобы взломать строку VTA.P,JR;STJQATPZX,VJX,JF;A...

Шифр Цезаря - C++
Створити програму, що реалізовує алгоритм дешифрування Цезаря, для латинського алфавіту з прогресуючим кроком від 3 до 10 (ВЕЛИКІ малі...

Шифр Цезаря - усложненный - C++
Здравствуйте - писал программу для шифра цезаря - дали задание ее улучшить, пожалуйста помогите Вот ниже задание каким образом она должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.