Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Shkipper86
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 30
1

Шифрование путем замены символа на его порядковый номер в алфавите

25.09.2013, 15:27. Просмотров 1221. Ответов 6
Метки нет (Все метки)

Доброго времени суток! Помогите решить задачу. даже наброски сделать не получается.
задача: Ввести с клавиатуры строку зашифрованного текста. Расшифровать строку и вывести результат на экран. Шифрование было выполнено путем замены символа на его порядковый номер в алфавите в виде XXX (число из 3-х цифр, например 001, 010, 100).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 15:27
Ответы с готовыми решениями:

В исходную строку добавьте после каждого символа его номер по порядку в алфавите
"В исходную строку добавьте после каждого символа его номер по порядку в...

Шифрование текста путем замены букв
Подскажите пожалуйста. не могу сделать чтобы буквы менялись. только вывела...

Добавить к каждому элементу списка его порядковый номер
Добавить к каждому элементу списка его порядковый номер

Определить максимальный элемент массива В и его порядковый номер
Помогите найти и исправить в чем ошибка. Задание:Определить максимальный...

Определить максимальный элемент массива B (М) и его порядковый номер
Здравствуйте. Определить максимальный элемент массива B (М) и его порядковый...

6
ZeR_0
117 / 109 / 78
Регистрация: 30.01.2013
Сообщений: 297
25.09.2013, 17:12 2
разбивай строку по 3 числа и по словарю собирай
1
icansmile
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 3
25.09.2013, 18:10 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Так, если я правильно понял, то в английском алфавите-26 символов- значит у последнего символа порядковый номер 026. тогда так как-то:
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
#include <stdio.h>
 
 
#define SIZEARR 3
#define BUFFSIZE 1024
 
 
char decryption(char *str)
{
    int main_num, second_num,num_symb;
    char symb;
 
    main_num=*(str+1)-'0';
    second_num=*(str+2)-'0';
    
    num_symb=main_num*10+second_num;
 
    symb=num_symb+'a'-1;
 
    return symb;
}
int main()
{
    char c,d,ArrToDeCrypt[BUFFSIZE],ret_arr[BUFFSIZE],*crypt;
    char number[3];
    int j=0, i=0,z=0,num[BUFFSIZE],step=3;
    char k[]="acab";
 
    while((c=getchar())!='\n')
    {
        *(num+i)=c;
        i++;
    }
    i=0;
 
    while(*(num+i)!='\0')
    {
        *(number+j)=*(num+i);
        
        if (j==2)
        {
            ArrToDeCrypt[z]=decryption(number);
            z++;
            j=-1;
        }
        i++;
        j++;
    }
 
    
    
 
    return 0;
 
};
но советую подумать, как обрабатывать строку с пробелами и вывод слова сделайте.
0
Сонца
23 / 23 / 10
Регистрация: 20.06.2013
Сообщений: 83
26.09.2013, 00:13 4
Поскольку мы учим не совсем Си, писала комментарии на случай, если пользуюсь какими-то не Си-шными функциями..
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
#include <iostream>
using namespace std;
 
int main()
{
    char line[99];          //строка в которую будем принимать шифр
    char result[50];        //строка в которую будем расшифровывать
    cin.getline(line, 99);  //получение строки шифрованной строки от пользователя
    fflush(stdin);
 
    int j = 0;
    for (int i = 0; line[i] != '\0'; i += 3)
    {
        if (line[i] == '1') result[j++] = ' '; //если мы имеем 100 - расшифруем как пробел
        //формула которая определяет какие значения цифр введены и прибавляет к цифровому 
        //значению символа 64 (в шифре А - 001, в таблице символов А - 65)
        else result[j++] = ((int)line[i + 1] - 48) * 10 + (int)line[i + 2] - 48 + 64;
    }
    //заканчиваем строку результатов тернарным оператором и выводим на экран
    result[j++] = '\0';
 
    cout<<endl<<"Result"<<endl;
    for (int i = 0; i < j; i++)
        cout<<result[i];
}
http://www.cyberforum.ru/attachment....1&d=1380139982
1
Миниатюры
Шифрование путем замены символа на его порядковый номер в алфавите  
Shkipper86
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 30
26.09.2013, 07:11  [ТС] 5
Сонца, Спасибо за код. подогнал под си все заработало! А как сделать тоже самое для Русского языка? в смысле что бы расшифровывал на русский.
0
Сонца
23 / 23 / 10
Регистрация: 20.06.2013
Сообщений: 83
26.09.2013, 09:28 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Нужно выяснить в пределах каких символов живет русский язык.
Я если подключаю через
C
1
2
SetConsoleOutputCP(1251); //требуется библиотека <Windows.h>
    SetConsoleCP(1251);
У меня символ А живет в значении 128 и дальше по возрастающей.
Тогда последнее слагаемое формулы нужно заменить на 127
C
1
else result[j++] = ((int)line[i + 1] - 48) * 10 + (int)line[i + 2] - 48 + 127;
Если подключать
C
1
setlocale(LC_ALL, "");
А это -64 и тогда нужно не 127 прибавлять, а 65 вычитать
C
1
else result[j++] = ((int)line[i + 1] - 48) * 10 + (int)line[i + 2] - 48 - 65;
Как-то так.
1
Shkipper86
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 30
26.09.2013, 12:21  [ТС] 7
Сонца, Благодарю!
0
26.09.2013, 12:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 12:21

Вывести порядковый номер последнего из тех его элементов AK, которые удовлетворяют двойному неравенству
Решите задачу Дан целочисленный массив A размера 10. Вывести порядковый...

Вывести порядковый номер последнего из тех его элементов Ак, которые удовлетворяют двойному неравенству
1) Дано целое число N (&gt;0). Сформировать и вывести целочисленный массив размера...

Получить номер кодовой страницы и номер символа в этой кодовой странице для каждого символа
Вот на этот раз я точно туда пишу. /* Предыстория */ У меня есть некоторый...


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

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

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