С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 06.12.2012
Сообщений: 12

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

06.12.2012, 11:48. Показов 967. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.12.2012, 11:48
Ответы с готовыми решениями:

Шифр Цезаря и шифр Виженера
1. Используя шифр Цезаря расшифруйте слово ЛГПЗРГ. Шифр Цезаря для русского алфавита со сдвигом на три позиции вправо 2. Используя шифр...

Шифр Цезаря
Здравствуйте, понимаю что тема достаточно распространенная, но пишу программу для шифрования методом Цезаря и столкнулась с ошибкой, не...

Шифр Цезаря
Доброго времени суток! Подскажите пожалуйста! Написать программу, которая выполняет шифрование строки с помощью шифра Цезаря. ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.12.2012, 11:48
Помогаю со студенческими работами здесь

Шифр Цезаря С++
Уже долго сижу, мучаюсь. Не могу понять, что я делаю не так. Подскажите пожалуйста что неправильно, как исправить и где можно почитать по...

Шифр Цезаря
Название данного шифра происходит от имени древнеримского императора Юлия Цезаря, который использовал данный шифр для обмена сообщениями с...

Шифр Цезаря
Нужно написать программу Шифра Цезаря не с ключом а методом перебора. Как ее написать в голову не приходит. Может кто поможет?

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

Шифр Цезаря
Ребята,помогите пожалуйста. Нужно написать шифр Цезаря в си шарпе ,использую вот такой алгоритм шифрования:N=(N+K) mod 256,где N- код...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru