1

Как осуществить расшифровку текста с данным ключом с помощью массивов? (В "C++" 2-ой месяц)

Подумываю над тем чтобы создать два массива: один шифр, другой ключ. И заменить первый вторым. Но вот беда, не могу взять и заменить одну кириллицу другой. + Вообще не читает кириллицу и в командной строке отображаются иероглифы.

Kromster
  • 13,809
  • Вообще совсем ничего не понятно. Хотя бы какой шифр - прямая подстановка, замена одного алфавита другим? – gbg Mar 04 '18 at 23:55
  • Расшифровать текст: "Руинцирекевфекеестфаитапсьмиуслпрым. МфхфтмфОфнди". Открытый текст: "афгоепрузв". Символы зашифрованного текста: "фгоепрузва". – Шурик Анваров Mar 05 '18 at 00:07
  • Ключ, алгоритм шифрования - известны? – gbg Mar 05 '18 at 00:07
  • Принцип око зa око остaвит весь мир слепым. Мaхaтма Гaнди - этого достаточно? :) – Harry Mar 05 '18 at 06:08
  • @gdb Да у него там проблема в кириллице; расшифровывать там нечего... – Harry Mar 05 '18 at 06:09
  • Смотрите здесь: https://ru.stackoverflow.com/questions/459154/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9-%D1%8F%D0%B7%D1%8B%D0%BA-%D0%B2-%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8/459299#459299 – Harry Mar 05 '18 at 06:11
  • @Harry "Как осуществить расшифровку текста с данным ключом с помощью массивов?" это был основной вопрос а кириллица уже второстепенное. – Шурик Анваров Mar 05 '18 at 16:59
  • Ну сейчас набросаю :) – Harry Mar 05 '18 at 17:10

2 Answers2

1

Вот ваша расшифровка:

char text[] = "руинцирекевфекеестфаитапсьмиуслпрым. мфхфтмфофнди";
char src[]  = "афгоепрузв";
char dst[]  = "фгоепрузва";

int main(int argc, const char * argv[])
{
    for(char * c = text; *c; ++c)
    {
        char * s = strchr(dst,*c);
        if (s) *c = src[s-dst];
        cout << *c;
    }
}

Чтоб побыстрее, я

  1. писал в 866 кодировке и не заморачивался с русскими буквами.

  2. руками преобразовал все символы в нижний регистр.

Принцип до смешного прост - если буква длинного текста есть в зашифрованном тексте ("фгоепрузва") - мы меняем ее на соответствующую букву открытого текста; если нет - оставляем букву как есть...

Harry
  • 221,325
  • Да, такой алгоритм сразу пришел в голову когда впервые встретился с заданием, но не знал как его реализовать. char*c/s - это указатели или какие то операторы используемые конкретно для типов char ? – Шурик Анваров Mar 05 '18 at 17:26
  • Указатели на char – Harry Mar 05 '18 at 17:45
0

Если в командной строке иероглифы, то скорее всего кодировка командной строки и файла отличаются. Если вы на линукс, то используйте utf-8

inzem77
  • 768