Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на ROT13, Шифрование текста шифром ROT13 
:(
    Опции темы
Cutebear
Дата 17.9.2015, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.9.2015

Репутация: нет
Всего: нет



Доброго времени суток, форумчане! Помогите мне с решением одной незамысловатой задачки, пожалуйста. Задача: создать программу на языке С++, которая будет брать английский текст из указанного файла, шифровать его шифром ROT13, и сохранять шифрованный текст в другом, новом файле. Желательно с пояснениями. Буду премного благодарен всем, кто окажет помощь!

Это сообщение отредактировал(а) Cutebear - 17.9.2015, 20:07
PM MAIL   Вверх
feodorv
Дата 18.9.2015, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



На C:
Код

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main( void )
{
  const char *inputName = "input.txt";
  const char *outputName = "output.txt";
  FILE *input, *output;
  int c, wasError = 0;

  if( (input = fopen( inputName, "r")) == NULL )
  {
    fprintf( stderr, "Can't open file %s: %s\n", inputName, strerror(errno));
    return -1;
  }
  if( (output = fopen( outputName, "w")) == NULL )
  {
    fprintf( stderr, "Can't open file %s: %s\n", outputName, strerror(errno));
    fclose( input );
    return -1;
  }

  while( (c = fgetc( input )) != EOF )
  {
    if( c >= 'a' && c < 'z' )
      c = (c + 13 > 'z') ? (c - 13) : (c + 13);
    else if( c >= 'A' && c < 'Z' )
      c = (c + 13 > 'Z') ? (c - 13) : (c + 13);
    if( fputc( c, output) == EOF ) break;
  }

  if( ferror( input ) )
  {
    fprintf( stderr, "Can't read file %s: %s\n", inputName, strerror(errno));
    wasError = 1;
  }
  else if( ferror( output ) )
  {
    fprintf( stderr, "Can't write file %s: %s\n", outputName, strerror(errno));
    wasError = 1;
  }

  fclose( input );
  fclose( output );

  return wasError ? -1 : 0;
}

Остается переделать под C++.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Cutebear
Дата 18.9.2015, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.9.2015

Репутация: нет
Всего: нет



Спасибо! 
PM MAIL   Вверх
volatile
Дата 18.9.2015, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



вероятно
Цитата(feodorv @  18.9.2015,  05:52 Найти цитируемый пост)
    if( c >= 'a' && c <= 'z' )
      c = (c + 13 > 'z') ? (c - 13) : (c + 13);
    else if( c >= 'A' && c <= 'Z' )
      c = (c + 13 > 'Z') ? (c - 13) : (c + 13);


Добавлено через 2 минуты и 35 секунд
или то же самое
Код

   if (isalpha(c))
       c += (tolower(c) - 'a') < 13 ? 13 : -13;

PM MAIL   Вверх
feodorv
Дата 18.9.2015, 19:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(volatile @  18.9.2015,  12:08 Найти цитируемый пост)
вероятно

Однозначно! Ну я как обычно  smile

Добавлено через 3 минуты и 7 секунд
Цитата(volatile @  18.9.2015,  12:08 Найти цитируемый пост)
или то же самое

Гм. А если кодировка выставлена, то под это дело могут попасть не только английские буквы  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
volatile
Дата 18.9.2015, 23:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(feodorv @  18.9.2015,  19:47 Найти цитируемый пост)
 А если кодировка выставлена,

да, с кодировкой работать не будет.  smile 

feodorv, 1:1  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.