Шифр Caesar в C++

Помните, что это асинхронный вызов, поэтому ваш код должен быть внутри обещания.

Например:

function getJson() {
    fetch("https://api.myjson.com/bins/y2v0k")
        .then(function (res) {
            return res.json();
        })
        .then(function (data) {
            let minuteMarkers = [];

            data.event.forEach(function (item) {
                minuteMarkers.push(item.EventTimeMin);
            });

            createPlayer(minuteMarkers);
        })
        .catch(function (err) {
            console.log(err);
        });
}

function createPlayer(minuteMarkers) {
    let player = new MediaElementPlayer("player2", {
        features: [
            "playpause",
            "current",
            "progress",
            "duration",
            "markers",
            "fullscreen"
        ],
        markers: minuteMarkers,
        markerColor: "#00FF00",
        markerCallback: function (media, time) {
            alert(time);
        }
    });
}

getJson();
5
задан Hosch250 2 November 2014 в 04:42
поделиться

6 ответов

Если Вы имеете дело с простыми буквами (От A до Z или к z), то можно предположить, что коды внутренностей линейны.

Буквы кодируются как числа, между 0 и 127. A кодируется как 65, B как 66, C как 67, Z как 90.

Для смещения букв просто необходимо изменить внутренний алфавитный код, как будто это было число, так в основном просто substracting 3 от символа. Остерегайтесь пограничных случаев, хотя, потому что substracting 3 к желанию дает Вам'>' (кодируют 62), а не 'X' (кодируют 88). Можно иметь дело с ними использование "если" операторы или оператор по модулю (" % ").

Вот таблица символов ASCII для помощи Вам

6
ответ дан 18 December 2019 в 10:49
поделиться

После того как Вы загрузили свою строку в, можно использовать узловатый оператор для вращения при оставлении в рамках ограничений пространства A-Z.

Я отслеживал бы то, была ли буква капиталом для запуска с:

bool isCaps = ( letter >= 'A' ) && ( letter <= 'Z' );
if( isCaps )
  letter -= 'A'-'a';

и затем просто сделайте сдвиг шифра как это:

int shift = -3;
letter -= 'a'; // to make it a number from 0-25
letter = ( letter + shift + 26 ) % 26;
        // add 26 in case the shift is negative
letter += 'a'; // back to ascii code

наконец разрушьте с

if( isCaps )
  letter += 'A'-'a';

таким образом соединение всего этого мы добираемся:

char *mystring; // ciphertext
int shift = -3; // ciphershift

for( char *letter = mystring; letter; ++letter )
{
  bool isCaps = ( *letter >= 'A' ) && ( *letter <= 'Z' );
  if( isCaps )
    *letter -= 'A'-'a';

  letter -= 'a';
  letter = ( letter + shift + 26 ) % 26;
  letter += 'a';

  if( isCaps )
    letter += 'A'-'a';
}
5
ответ дан 18 December 2019 в 10:49
поделиться

Выполните итерации по символам с для цикла. И сделайте то, что Вы хотите с char*. Затем отложите новый символ.

1
ответ дан 18 December 2019 в 10:49
поделиться

Вы оказываетесь перед необходимостью изучать циклы. Они позволят Вам повторять некоторый код по символам строки, которая является точно, в чем Вы нуждаетесь здесь. Вы сохраните целочисленную переменную, которая будет Вашим индексом в строку, и в цикле делают Ваше смещение буквы на символе в том индексе и увеличивают индексную переменную одной, пока Вы не достигаете ПУСТОГО УКАЗАТЕЛЯ.

Править: Если Вы, как ожидают, не будете знать о циклах еще в Вашем курсе, возможно, они хотят, чтобы Вы сделали это:

string[0] -= 3; // this is short for "string[0] = string[0] - 3;"
string[1] -= 3;
string[2] -= 3;
...

Это только приведет к 12 строкам кода, а не милям. Вы не должны "повторно собирать" строку этот путь, можно просто отредактировать каждый оперативный символ. Затем я держал пари после того, чтобы заставлять Вас сделать это, они покажут Вам быстрый способ сделать его с помощью циклов.

2
ответ дан 18 December 2019 в 10:49
поделиться
for(int i=0; i<12; i++){
  string[i] = string[i] - 3;
}

Где строка является Вашим символьным массивом (строка). Там немного более включен, если Вы хотите сделать это периодическим (Т.Е. иметь A, оборачивают к Z, но вышеупомянутый код должен помочь Вам начать),

1
ответ дан 18 December 2019 в 10:49
поделиться

Я немного неясен, под чем Вы подразумеваете, "смещают буквы назад 3"? Это означает D ==> A?
Если так, вот простой цикл.

(Я не сделал чтения из файла или записи в файл... Это - Ваша часть),

#include <string.h>

int main(void)
{                      
    char input[13] = "ABCDEFGHIJKL";
    int i;

    int len = strlen(input);

    for(i=0; i<len; ++i)
    {
        input[i] = input[i]-3;
    }

    printf("%s", input);  // OUTPUT is: ">?@ABCDEFGHI"
}
1
ответ дан 18 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: