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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 15:57   #1
Из_Астрала
 
Аватар для Из_Астрала
 
Регистрация: 03.05.2010
Сообщений: 6
Подмигивание файлы и строки зашифрованные

Человечки)) Всех с весенней и солнечной погодой)))
Вот сижу и не могу правильно зашифровать текстик....
Трабл в том, что последняя строчка только обрабатывается, а нужно весь файл, который все-таки выводится.
Код:
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream.h>
#include<string.h>
#include<ctype.h>

void main()
{
  char a[130],q[130],c[130],d[26][30];
  FILE *pf,*pg, *pt;
  int l=0,i=0,j=0,m=0,k[15],e[60],t;

  clrscr();
 pf=fopen("ss.txt","r");
  while (!feof(pf))
  {
    fgets(d[i],30,pf);
    i++;
  }
  for (i=0;i<130;i++)
    c[i]=0;
  cout<<"\n";

  cout<<" =======================\n";
  cout<<" vvedite kluchevoe slovo \n\n";
  gets(a);
  l=strlen(a);

  char ch;

  do
  {
    printf("\n\n");
    do
    {
      cout<<"=========================\n";
      cout<<"1. VVOD S KLAVIATURI\n";
      cout<<"=========================\n";
      cout<<"2. VVOD IZ FAILA\n";
      cout<<"=========================\n";
      cout<<"0. VIHOD\n\n";
      cout<<"=========================\n";
      cout<<"VASH VIBOR:";
      cin>>ch;
    }
    while(!strchr("120",tolower(ch)));

    switch(ch)
    {

    case'1':
    {
      clrscr();


      cout<<"\n\n=======================\n";
      cout<<"\nvvedite frazu dlya shifrovaniya \n\n";
      gets(q);
      m=strlen(q);

      for (i=0;i<m;i++)
      {
      if ((q[i]==' ')||(q[i]==',')||(q[i]=='.'))
	for (j=i;j<m;j++)
	  q[j]=q[j+1];
      }
      m=strlen(q);

      for(i=0;i<l;i++)
      for(j=0;j<26;j++)
	if (a[i]==d[0][j])
	  k[i]=j;

    for (i=0;i<m;i++)
      for (j=0;j<26;j++)
	if (q[i]==d[j][0])
	  e[i]=j;

    j=0;i=0;
    while (i<m)
    {
      c[i]=d[e[i]][k[j]];
      i++;j++;
      if (j==l)
	j=0;
    }
    m=strlen(c);
    cout<<" =======================\n";
    cout<<"\n\nzashifrovannaya fraza \n\n";
    for (i=0;i<m;i++)
      cout<<c[i];
    getch();
    pg=fopen("ww.txt","w");
    fprintf(pg,"%s",c);
    fclose(pg);
    cout<<"\n\n=======================\n";
    printf("\nnazmite lubyu klavishu");
    getch();
    clrscr();
    break;
  }

  case'2': {
  {
    clrscr();


    pt=fopen("l.txt","r");
      cout<<"\n=======================\n";
  cout<<"\nfraza dlya shifrovaniya \n\n";

    while (!feof(pt))

     { fgets(q,130,pt);
printf("\n%s",q); }
m=strlen(q);

   for (i=0;i<m;i++)
  {
    if ((q[i]==' ')||(q[i]==',')||(q[i]=='.'))
      for (j=i;j<m;j++)
	q[j]=q[j+1];
  }
  m=strlen(q);

  for(i=0;i<l;i++)
    for(j=0;j<26;j++)
      if (a[i]==d[0][j])
	k[i]=j;

  for (i=0;i<m;i++)
    for (j=0;j<26;j++)
      if (q[i]==d[j][0])
	e[i]=j;

  j=0;i=0;
  while (i<m)
  {
    c[i]=d[e[i]][k[j]];
    i++;j++;
    if (j==l)
      j=0;
  }
  m=strlen(c);
  cout<<"\n=======================\n";
  cout<<"\n\nzashifrovannaya fraza \n\n";
  for (i=0;i<m;i++)
  cout<<c[i];
  getch();
  pg=fopen("ww.txt","w");
  fprintf(pg,"%s",c);


  fclose(pg);
   cout<<"\n\n=======================\n";
    printf("\nnazmite lubyu klavishu");
    getch();
    clrscr();
    break;
  }
case'0':{t=1;exit(1);}}}}
 while (t!=1);

}
Очень хочу доделать это все и надеюсь на вашу помощь.
Из_Астрала вне форума Ответить с цитированием
Старый 03.05.2010, 17:04   #2
Из_Астрала
 
Аватар для Из_Астрала
 
Регистрация: 03.05.2010
Сообщений: 6
По умолчанию

Просто работа выполняется только над последней строчкой в файле. На экран выводится весь исходный файл l.txt, а работа зашифрированного текста выводится только последняя строка и записывается она же в файл ww.txt. Хотя весь текст исходного файла l.txt должен быть преобразован в строку, над которой потом должна идти работа.
Как исправить код?
В частности эту часть:
Код:
  case'2': {
  {
    clrscr();


    pt=fopen("l.txt","r");
      cout<<"\n=======================\n";
  cout<<"\nfraza dlya shifrovaniya \n\n";

    while (!feof(pt))

     { fgets(q,130,pt);
printf("\n%s",q); }
m=strlen(q);

   for (i=0;i<m;i++)
  {
    if ((q[i]==' ')||(q[i]==',')||(q[i]=='.'))
      for (j=i;j<m;j++)
	q[j]=q[j+1];
  }
  m=strlen(q);

  for(i=0;i<l;i++)
    for(j=0;j<26;j++)
      if (a[i]==d[0][j])
	k[i]=j;

  for (i=0;i<m;i++)
    for (j=0;j<26;j++)
      if (q[i]==d[j][0])
	e[i]=j;

  j=0;i=0;
  while (i<m)
  {
    c[i]=d[e[i]][k[j]];
    i++;j++;
    if (j==l)
      j=0;
  }
  m=strlen(c);
  cout<<"\n=======================\n";
  cout<<"\n\nzashifrovannaya fraza \n\n";
  for (i=0;i<m;i++)
  cout<<c[i];
  getch();
  pg=fopen("ww.txt","w");
  fprintf(pg,"%s",c);


  fclose(pg);
   cout<<"\n\n=======================\n";
    printf("\nnazmite lubyu klavishu");
    getch();
    clrscr();
    break;
  }
Из_Астрала вне форума Ответить с цитированием
Старый 03.05.2010, 18:02   #3
Из_Астрала
 
Аватар для Из_Астрала
 
Регистрация: 03.05.2010
Сообщений: 6
По умолчанию

Наверное, нужно как-то сначала правильно определить длину теста, а не так
Код:
    while (!feof(pt))

     { fgets(q,130,pt);
printf("\n%s",q); }
m=strlen(q);
Но как? Человечки, Вы же умные, подскажите что-то, пожалуйста))

У меня уже нет силс ней мучаться. Кто-то знает как это можно преобразовать?

И все же??

Последний раз редактировалось Stilet; 04.05.2010 в 08:46.
Из_Астрала вне форума Ответить с цитированием
Старый 04.05.2010, 08:54   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так . Первый же вопрос: каким методом ты шифруешь.
Твой код громоздок, и разбираться в нем затруднительно, я уверен что можно написать шифратор попроще.
Например
Код:
#include "stdafx.h"
#include <stdio.h>
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
	FILE *f=fopen("C:\\temp\\bo_dump.txt","rb");
	char c[255];
	while (!feof(f)){
	// Читаем строку
	 fscanf(f,"%s",&c);
    // Шифруем строку
	 for(int i=0;i<strlen(c);i++){
		 c[i]+=1;
	 }
    // пишем строку
	 printf("%s\n",c);
	}
	getchar();
	return 0;
}
Сдесь printf выводит на экран, но с таким же успехом можно использовать fprintf для вывода в файл.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.05.2010, 17:02   #5
Из_Астрала
 
Аватар для Из_Астрала
 
Регистрация: 03.05.2010
Сообщений: 6
По умолчанию

Критосистема Бьюфорта. Шифровать же надо весь текст полнотью, а не по строкам. Когда файл содержит несколько строк, то шифроваться должна строка без знаков препинания и пробелов.
А в коде шифруется либо одна строка, либо строки по отдельности.
Как исправить код?
Из_Астрала вне форума Ответить с цитированием
Старый 10.05.2010, 17:20   #6
Из_Астрала
 
Аватар для Из_Астрала
 
Регистрация: 03.05.2010
Сообщений: 6
По умолчанию

Может, нужно как-то все строки преобразовать в одну?
Из_Астрала вне форума Ответить с цитированием
Старый 12.05.2010, 11:13   #7
Из_Астрала
 
Аватар для Из_Астрала
 
Регистрация: 03.05.2010
Сообщений: 6
По умолчанию

Stilet, ваша подпроограмма шифрирует только по строкам, да? Но текст же должен шифрироваться полностью
Из_Астрала вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строки и файлы в с++ LovingDaisy Общие вопросы C/C++ 2 21.01.2010 00:20
Строки и файлы. Шифрование mishanic Общие вопросы C/C++ 2 14.12.2009 17:11
Не открываются зашифрованные файлы Amen Операционные системы общие вопросы 4 18.10.2009 23:49
Файлы, строки. Паскаль Safary Помощь студентам 6 08.12.2008 18:04
Строки и файлы BR@BUS Общие вопросы Delphi 5 08.04.2008 23:54