Форум программистов, компьютерный форум CyberForum.ru

Шифровка данных элементарным способом - C++

Восстановить пароль Регистрация
 
Kirill_KZ
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 138
13.07.2013, 13:41     Шифровка данных элементарным способом #1
Всем привет.
Нес-ко дней изучаю C++.
Пишу, дописываю, перерабатываю примеры из книг по некоторые задачи.
Вот вчера пришла мысль зашифровать данные. (расшифровка пока не нужна)
Нашёл небольшой код для подсчёта символов, который я сам понял и вставил в программу.
Возникшая проблема: ввожу комбинацию из "AZ", консоль в ответ выводит "ZA"(как и должно быть), но там ещё есть непонятные символы. Вот "ZA╠" - что это такое в конце и как избавиться от этого?
И ещё, как обрабатывать нужно будет пробелы, знаки препинания?
Знаю, что код черед одно место написан, но помогите, пожалуйста, разобраться в возникших проблемах
Заранее всем благодарен за помощь.
Вот собственно сам код:
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cstring>
using namespace std;
int main()
{
    int n=0,i=0;
    char letter[27], letter1[27];
    char* str = new char[5]; // поставил пока, чтобы не более 5 символов обрабатывалось
    cout<<"Please, enter the string: ";
    cin.getline(str, 80, '\n'); 
    int count = strlen(str); //получаем кол-во символов
        for(n=0; n<=count; n++){ //для обработки каждой буквы
        for(letter[i]='A', letter1[i]='Z';letter[i]<='Z', letter1[i] >= 'A';letter[i]++, letter1[i]--) //вывод алфавита с A до
        {                                                                                       // до Z, и с Z до A, в одно и тоже время
        if(str[n]==letter[i]){        //сравниваем значения букв     || т.к. шифровка идёт сменой букв на их "отраж
            str[n]=letter1[i];     //если всё ок, то "=" переменной || ение" в алфавите.
            cout << letter1[n]; // и сразу же выводим её
        }
        }
               }
          return 0;
}
P.S.: постарался прокомментировать каждую строку, чтобы было понятней, что я "мудрил".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 13:41     Шифровка данных элементарным способом
Посмотрите здесь:

C++ Шифровка и дешифровка текста
C++ шифровка/дешифровка
C++ Шифровка табличной заменой
C++ Простейшая шифровка текста.
C++ Шифровка текста двунаправленным списком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 13:51     Шифровка данных элементарным способом #2
C++
1
for(n = 0; n < count; n++)
Kirill_KZ
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 138
13.07.2013, 14:07  [ТС]     Шифровка данных элементарным способом #3
Thinker, и что этим изменилось? лишний цикл не помешает)
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 14:07     Шифровка данных элементарным способом #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
#include <iostream>
#include <conio.h>
#include <cstring>
using namespace std;
const int N = 1024;
int main()
{
    int i = 0;
    char c1, c2, *str = new char[N]; // поставил пока, чтобы не более 5 символов обрабатывалось
    cout<<"Please, enter the string: ";
    cin.getline(str, N, '\n'); 
    int count = strlen(str); //получаем кол-во символов
    for(i = 0; i < count; i++) //для обработки каждой буквы
    {
        for(c1 = 'A', c2 = 'Z'; c1 <= 'Z' && c2 >= 'A'; c1++, c2--) //вывод алфавита с A до
           if(str[i] == c1)        //сравниваем значения букв     || т.к. шифровка идёт сменой букв на их "отраж
           {
              str[i] = c2;     //если всё ок, то "=" переменной || ение" в алфавите.
              break;
           }
    }
    cout << str << endl;
    return 0;
}
Kirill_KZ
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 138
13.07.2013, 14:22  [ТС]     Шифровка данных элементарным способом #5
Thinker, спасибо большое)
Не подскажите в чём была моя ошибка? И почему выводились эти "корякули"?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 14:24     Шифровка данных элементарным способом #6
ошибка в том, что надо было сразу так писать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cctype>
using namespace std;
const int N = 1024;
int main()
{
    char str[N], *ps = str; 
    cout << "Please, enter the string: ";
    cin.getline(str, N); 
    for(; *ps; ++ps) 
       *ps = 'A' + 'Z' - *ps;
    cout << str << endl;
    return 0;
}
это заменяет весь ваш алгоритм
Kirill_KZ
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 138
13.07.2013, 14:38  [ТС]     Шифровка данных элементарным способом #7
Thinker, я пытался написать по знаниям, которые я получил) Которых и не много я смог "набрать" за 3 дня. Но почти получилось сделать то, что хотел...)
А Ваш алгоритм, конечно, мой "уделал" как минимум на строк 10
Спасибо.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 14:39     Шифровка данных элементарным способом #8
Цитата Сообщение от Kirill_KZ Посмотреть сообщение
А Ваш алгоритм, конечно, мой "уделал" как минимум на строк 10
это я максимально понятно писал, для себя бы так примерно сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
const int N = 1024;
int main()
{
    char str[N], *ps = str; 
    std::cin.getline(str, N); 
    for(; *ps; *ps++ = 'A' + 'Z' - *ps) 
       ;
    std::cout << str << endl;
    return 0;
}
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
13.07.2013, 14:48     Шифровка данных элементарным способом #9
Thinker,
1) std::endl;
2) Мне кажется, что гетлайн не нужен, просто cin >> str обойтись, т.к. пробелы обрабатывать не нужно же. Изменение ведется ведь в пределах алфавита.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 14:50     Шифровка данных элементарным способом #10
Цитата Сообщение от Dani Посмотреть сообщение
Thinker,
1) std::endl;
2) Мне кажется, что гетлайн не нужен, просто cin >> str обойтись, т.к. пробелы обрабатывать не нужно же. Изменение ведется ведь в пределах алфавита.
1. да, std забыл.
2. можно, просто это заготовка под универсальный алгоритм
Kirill_KZ
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 138
13.07.2013, 14:55  [ТС]     Шифровка данных элементарным способом #11
Thinker, я даже понял, что там написано, но пока сложновато такое реализовать самостоятельно)
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 14:56     Шифровка данных элементарным способом #12
например, если обработать нужно только большие буквы (можно любые строки вводить), то
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cctype>
const int N = 1024;
int main()
{
    char str[N], *ps = str; 
    std::cin.getline(str, N); 
    for(; *ps; *ps = (!!isupper(*ps)) * ('A' + 'Z' - *ps) + (!!!isupper(*ps)) * (*ps), ++ps) 
       ;
    std::cout << str << std::endl;
    return 0;
}
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
13.07.2013, 14:59     Шифровка данных элементарным способом #13
Можешь объяснить, а зачем 2 и 3 отрицания подряд?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 15:01     Шифровка данных элементарным способом
Еще ссылки по теме:

Шифровка и расшифровка текста C++
Не можем разобраться с элементарным C++
C++ Шифровка в ASCII

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 15:01     Шифровка данных элементарным способом #14
Цитата Сообщение от Dani Посмотреть сообщение
Можешь объяснить, а зачем 2 и 3 отрицания подряд?
если a не равно нулю, то
!!a = 1,
!!!a = 0,
и
!!0 = 0
!!!0 = 1

лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cctype>
const int N = 1024;
int main()
{
    char str[N], *ps = str; 
    std::cin.getline(str, N); 
    for(; *ps; *ps = (!!isupper(*ps)) * ('A' + 'Z' - *ps) + (!isupper(*ps)) * (*ps), ++ps) 
       ;
    std::cout << str << std::endl;
    return 0;
}
Yandex
Объявления
13.07.2013, 15:01     Шифровка данных элементарным способом
Ответ Создать тему
Опции темы

Текущее время: 21:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru