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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 20:30   #1
GrafMonte
 
Регистрация: 11.10.2011
Сообщений: 5
По умолчанию Шифр Цезаря проблемы со знаками препинания

Реализую шифр цезаря, возникла проблема со знаками препинания, не выводятся как надо. Что нужно исправить?
Код:
#include <iostream>
#include <fstream>
using namespace std;
 
 const char alphavit_h[]={ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
 const char alphavit_l[]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
  's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
 const char cyf[]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
 const char znaki[]={' ', '!', ',', '.', ':', ';', '?'};
 
 
 
 
 int main()
 {
        char x[100];
        int i;
        int m=26;
        int n=1;
        int k, B;
        
 
 
        cout << "Vvedite kluch: ";
        cin >> k;
        
        ifstream in("open");
 
        if(!in) {
                cout << "Not open file\n";
                return 1;
        }
 
        while (in) {
                in.getline(x, 100);
                if(in) cout <<x <<endl;
                for ( i=0; x[i]; i++)
                        for(int j=0,  s=0, t=0; j<26 || s<sizeof(cyf) || t<sizeof(znaki); j++, s++, t++)        {
 
                                if(x[i] == alphavit_h[j]){
                                B=(x[i]-'A'+k)%m;
                                cout << alphavit_h[B];
                                }               
 
                                else if(x[i]==alphavit_l[j]){
                                        B=(x[i]-'a'+k)%m;
                                        cout << alphavit_l[B];
                                }
                        
                                else if(x[i]==cyf[s]){
                                        B=(x[i]-'0'+k)%sizeof(cyf);
                                        cout << cyf[B];
                                } 
                                
                                else if(x[i]==znaki[t]){ // знаки препинания
                                        B=(x[i]-' '+k)%sizeof(znaki); 
                                        cout << znaki[B];                                       
                                }                               
                        }
                in.close();     
        }
        return 0;       
 }
GrafMonte вне форума Ответить с цитированием
Старый 13.10.2011, 21:20   #2
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

Все намного проще если представить что у вас 255 символов в алфавите.
К примеру:
Код:
#include<iostream>
#include<fstream>
const int strsize =255; 
using namespace std;
int f_in(char *t);
int f_out(char *t);
int cez(char *t,int key);

int main(){
	setlocale(LC_ALL,"Russian");
	int kom;
	int key;
	char text[strsize];
	cout<<"вы хотите \n 1.зашифровать \n 2 расшифровать сообщения \n";
	cin >>kom;
	cout <<"введите ключ \n";
	cin>>key;
	if(kom==2)
		key*=-1;
	f_in(text);
	cez(text,key);
	f_out(text);
	return 0;

}
int f_in(char *t){
	char fname[strsize];
	cout<<"введите имя файла с текстом \n";
	cin>>fname;
	ifstream in (fname);
	in.getline(t,strsize);
	in.close();
	return 0;
}

int f_out(char *t){
	char fname[strsize];
	cout<<"введите имя файла с куда запишем текст \n";
	cin>>fname;
	ofstream out (fname);
	out<< t;
	out.close();
	return 0;
}

int cez(char *t, int key){
	for(int i=0;t[i]!='\0';i++)
		t[i]=t[i]+key;
	return 0;

}
Остается только обработать исключение когда символ+ключ равен символу конца строки
_kilik_ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шифр Цезаря Defa4ka Помощь студентам 5 23.10.2011 13:48
Расшифруйте шифр Цезаря Мокрый Помощь студентам 8 22.04.2011 17:24
Шифр цезаря (не работает) Айдар Помощь студентам 3 21.06.2010 11:15
Шифр Цезаря Goracio Помощь студентам 1 19.04.2010 14:53
Шифр Цезаря Jasper92 Помощь студентам 3 02.12.2009 18:47