Помогите сделать наброску програмы

Допустим имеется стока символов, которую вводит пользователь.
Требуется зашифровать любым способом это строку, а затем расшифровать методом полного перебора. На экран вывести саму строку, её шифр и затем уже саму расшифровку.
Больше никаких конкретных условий нет.

Как вариант

  #include <iostream>

using namespace std;

const int ArrSize = 50;

void Decode(const char arr[], int i);

int main()
{

    cout << "Input your name to encode: ";

    char ch;
    char encodeline[ArrSize];
    int i = 0;
    cin.get(ch);
    while (i < ArrSize){
        if ('\n' == ch)
            break;
        ++ch;
        encodeline[i] = ch;
        ++i;
        cin.get(ch);
    }
    if (i >= ArrSize){
        cin.clear();
        while (cin.get() != '\n')
            continue;
    }
    cout << "Your encoded name: ";
    for (int j = 0; j < i; ++j)
        cout << encodeline[j];
    cout << endl;
    cout << "If you want to decode press < y >, < n > - to quit: ";
    do{
        cin >> ch;
        switch(ch){
            case 'y': Decode(encodeline, i); break;
            case 'n': cout << "\nBye!!!\n"; break;
            default : cout << "\nMake your choice < y > or < n > >>> "; break;
        }
    }while ('n' != ch && 'y' != ch);
    return 0;
}
void Decode(const char arr[], int i)
{
    char ch;
    cout << "\nYour decoded name: ";
    for (int j = 0; j < i; ++j){
        ch = arr[j];
        cout << --ch;
    }
    cout << endl;
}

«Метод полного перебора» — это когда для всех символов строки используется каждый символ из определённого набора символов. Например, для строки из трёх символов и допустимого набора символов a-z комбинации будут:

aaa
aab
aac
...
aaz
aba
abb
abc
...
zzy
zzz

Всего 17 576 (26 х 26 х 26) комбинаций. Для строки длиной n символов количество комбинаций будет (количество допустимых символов) в степени n.

Видимо в задаче под «расшифровкой» имеется ввиду генерация очередной возможной комбинации символов и сравнение её с незашифрованной строкой. Хотя я могу и ошибаться.

Кроме того, Юрий, ты сильно перемудрил при работе со строками в С-стиле. Можно твой вариант программы написать гораздо проще:

#include <iostream>

using namespace std;

const int ArrSize = 50;

void Decode(const char arr[]);

int main()
{

    cout << "Input your name to encode: ";

    char ch;
    char encodeline[ArrSize];

    cin.getline(encodeline, ArrSize);
    cin.clear();
    cin.sync();
    char *cptr = encodeline;

    while (*cptr) {
        (*cptr++)++;
    }

    cout << "Your encoded name: " << encodeline << endl;

    cout << "If you want to decode press < y >, < n > - to quit: ";
    do{
        cin >> ch;
        switch(ch){
            case 'y': Decode(encodeline); break;
            case 'n': cout << "\nBye!!!\n"; break;
            default : cout << "\nMake your choice < y > or < n > >>> "; break;
        }
    }while ('n' != ch && 'y' != ch);
    return 0;
}
void Decode(const char arr[])
{
    const char *ch = arr;
    cout << "\nYour decoded name: ";

    while (*ch) {
        cout << char((*ch++) - 1);
    }

    cout << endl;
}

А если ещё и выкинуть кусок, спрашивающий пользователя хочет ли он декодировать строку...

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.