Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2022, 18:03   #1
kuberbager
 
Регистрация: 18.10.2022
Сообщений: 5
По умолчанию Написать программу для кодировки (раскодировки) текста

Написать программу для кодировки (раскодировки) текста по следующему принципу: каждый символ строки (символьный массив) преобразуется в числовой формат, к каждому числу прибавляется одна и та же постоянная величина, после чего полученные числа преобразуются в символы. Код должен позволять вводить данные пользователю с клавиатуры. У меня есть функции для кодирования и декодирования текста, но я не могу написать ввод этого самого текста.
Раскодировщик
Код:
#include <iostream>
#include <cstdio>
using namespace std;
void decoder(char *s,int *cstr,int n){
char str[100];
int i;
for(i=0;i<n;i++){
   str[i]=s[cstr[i]];
}
str[n]='\0';
cout<<str<<endl;
}
int main(){
char s[]="He would remember that honesty is the best policy!";
int cstr[]={0,10,6,45,4,49,2,0,4,3,17,20,9,1,8,29,24,5};
decoder(s,cstr,18);
return 0;
}
Кодировщик
Код:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
void getWord(char *s1,char *s2,int n){
int i=0,j=0;
int s=1;
while(s<n){
   if(s1[i]==' '){
      s++;}
   i++;
}
for(;(s1[i]!='\0')&&(s1[i]!=' ')&&(s1[i]!=',')&&(s1[i]!='.')&&(s1[i]!='!')&&(s1[i]!='?');i++,j++)
   s2[j]=s1[i];
s2[j]='\0';
}
//Подсчет слов в строке s:
int countWords(char *s){
int i,res=1;
for(i=0;s[i];i++) if(s[i]==' ') res++;
return res;
}
//Позиция слова s2 в строке s1:
int findWord(char *s1,char *s2){
int i,n;
char s[30];
n=countWords(s1);
for(i=1;i<=n;i++){
   getWord(s1,s,i);
   if(strcmp(s2,s)==0) return i;
}
return 0;
}
//Кодирование строки s2 на основе текста s1:
void encoding(char s1[4][100],char *s2,int *p,int n){
int pos;
char s[50];
int i,j;
for(i=1;i<=n/2;i++){
   getWord(s2,s,i);
   for(j=0;j<4;j++){
      pos=findWord(s1[j],s);
      if(pos){
         p[2*i-2]=j+1;
         p[2*i-1]=pos;
         break;
         }
   }
}
}
int main(){
int n,i;
int *p;
char s1[4][100]={"Зачем копить добро в пустыне бытия?",
"Кто вечно жил средь нас? Таких не видел я!",
"Ведь жизнь нам в долг дана, и то на срок не долгий,",
"А то, что в долг дано- не собственность твоя!"};
char s2[50]="Кто видел жизнь и жил в пустыне?";
n=2*countWords(s2);
p=new int[n];
encoding(s1,s2,p,n);
for(i=0;i<n;i++)
   cout<<p[i]<<" ";
cout<<endl;
delete [] p;
return 0;
}
kuberbager вне форума Ответить с цитированием
Старый 18.10.2022, 18:42   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Странный подход. А если так:
Код:
#include <iostream>
#include <sys/ioctl.h>
#include <termios.h>

std::string text_input() {
  std::string r = "";
  for (char c = getchar(); c != '\n'; c = getchar()) r += c;
  return r;
}

std::string pass_input() {
  termios t;
  ioctl(0, TCGETS, &t);
  int c_lflag = t.c_lflag;
  t.c_lflag &= !(ECHO | ICANON);
  ioctl(0, TCSETS, &t);
  std::string r = text_input();
  t.c_lflag = c_lflag;
  ioctl(0, TCSETS, &t);
  std::cout << std::endl;
  return r;
}

int main(int argc, char *argv[]) {
  std::string text, pass;
  std::cout << "Введите пароль: ";
  pass = pass_input();
  std::cout << "Введите текст: ";
  text = text_input();
  int len = text.length(), rep = pass.length();
  for (int i = 0, j = 0; i < len; ++i) text[i] = (text[i] + pass[(j < rep) ? j++: j = 0]) & 255;
  std:: cout << "Кодированный текст: " << text << std::endl;
  for (int i = 0, j = 0; i < len; ++i) text[i] = (text[i] - pass[(j < rep) ? j++: j = 0]) & 255;
  std:: cout << "Раскодированный текст: " << text << std::endl;
  return 0;
}
Тест:
Код:
$ ./main
Введите пароль: 
Введите текст: HELLO WORLD!
Кодированный текст: yw��V���xV
Раскодированный текст: HELLO WORLD!
А вот ссылка в онлайн компилятор.

Последний раз редактировалось macomics; 18.10.2022 в 18:58.
macomics вне форума Ответить с цитированием
Старый 18.10.2022, 19:59   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

ADD: Вам нужно прибавлять одно число. Тогда в качестве пароля можно вводить один символ. Попробуйте изменить пароль 123456 на пробел в онлайн компиляторе.
macomics вне форума Ответить с цитированием
Старый 19.10.2022, 21:49   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

kuberbager
Цитата:
Написать программу для кодировки (раскодировки) текста ...
Процесс, описанный в вашем решении, называется шифрованием, а не кодированием.
Кодирование - это процесс преобразования информационного сообщения с целью передачи.
Пример кодирования - передача информационного сообщения речью. Это может быть речь китайца, англичанина или русскоязычная.
Другое место применения кодирования - это передача информационных сообщений по каналам связи, например, радио, телевидение.
В процессе кодирования не используется секретная часть.
Ещё пример. Кодовая таблица - это таблица установления соответствия между кодом (номером символа) и его изображением.

Шифрование - это процесс преобразования кодированного информационного сообщения с целью передачи или хранения для ограниченного круга лиц, объектов.
В процессе шифрования используется секретная часть.
Например, передача информационного сообщения между активным оборудованием в сети ведётся с использованием секретной части.
Процесс шифрования относят к процессу кодирования (например, сталкивался с такими книгами и учебниками), но это не корректное отношение.
Зашифровать можно только закодированное сообщение. Нельзя зашифровать то, что не представлено в виде кода - ваши мысли, которые вы хотите донести до ...

Процесс декодирования - это процесс восстановления сообщения до уровня, понятного принимающей стороне. Если это человек, то до уровня представления переданной информации в голове слушателя, читателя, ...
Если это железо, например, маршрутизатор, то до уровня, достаточного, для принятия решения. Человек должен увидеть кодированный текст или услышать речь, которая тоже является кодом.

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

Эти понятия путать не следует.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 22.10.2022, 09:35   #5
kuberbager
 
Регистрация: 18.10.2022
Сообщений: 5
По умолчанию

Меня ограничили по вводимым библиотекам, так что код не совсем для меня. Но спасибо всем за помощь.
kuberbager вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напишите программу кодировки (декодировки) текста? Valery99 Помощь студентам 3 28.03.2017 23:02
Нужно написать программу на C#, которая удаляет из текста все слова igrik Помощь студентам 2 16.07.2013 18:13
Изменение кодировки текста werdana C++ Builder 3 20.10.2012 02:26
проблемы кодировки текста oya Помощь студентам 3 02.02.2009 23:19
написать программу статистического анализа текста moroshka Паскаль, Turbo Pascal, PascalABC.NET 2 08.01.2008 18:11