Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* На вход программе подается текст, состоящий не более чем из 200 символов.
- Текст был зашифрован следующим образом. Сначала определили количество букв в самом коротком слове, обозначив полученное число n
- (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами).
- Затем заменили каждую английскую букву в тексте на следующую за ней n-й по счету в алфавите
- (алфавит считается циклическим, за буквой Z следует буква А), оставив другие символы неизменными.
- Строчные буквы при этом остались строчными, а прописные — прописными. Напишите программу, которая будет выводить расшифрованный текст.
- Программа должна считать выходые данные из файла input.txt и вывести результат в файл output.txt */
- #include "StdAfx.h"
- #include <stdio.h>
- #include <iostream>
- /*метод для дешифрования*/
- void PrevChar(char c, int n, int count)
- {
- if(isalpha(c)) { //если буква
- if(count - ('Z'-toupper(c))<=n) { //если нужен циклический алфавит
- int k=n-(count - ('Z'-toupper(c)+1)); //считаем, на сколько надо сдвинуться влево от Z
- if(isupper(c)) c='Z'+1-k; //если буква большая, выводим большую
- else c='z'+1-k; //если буква не большая, выводим не большую
- }
- else c=c-n; //если циклический алфавит не нужен, то просто выводим предыдущую n-ную букву
- }
- printf("%c", c); //собсно сам вывод получившегося символа (если не буква - никакой обработки нет)
- }
- /*метод для шифрования*/
- void NextChar(char c, int n, int count)
- {
- if(isalpha(c)) { //если буква
- if('Z'-toupper(c)<n) {
- int k=n-('Z'-toupper(c)+1);
- if(isupper(c))
- c='A'+k;
- else
- c='a'+k;
- }
- else c=c+n;
- }
- printf("%c", c);
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- const int count = 26; //сколько букв в алфавите
- char c; //текущий символ
- int n = 0; //счетчик минимальной длины слова
- int min = count*10; //минимальная длина слова, иницилизация
- while (scanf("%c", &c) == 1) { //для каждого символа
- if(isalpha(c)) { //если это английская буква
- n++; //инкремент счетчика
- }
- else if(!isalpha(c)) { //если это не английская буква
- if(n<min && n>1) //если счетчик меньше имеющейся минимальной длины и больше еденицы (последовательность)
- min=n; //обновляем минимальную длину
- n=0; //очищаем счетчик
- }
- }
- if(n<min && n>1) //если счетчик меньше имеющейся минимальной длины и больше еденицы (последовательность)
- min=n; //обновляем минимальную длину
- while(min>count) //пока минимальная длина больше алфавита
- min=min-count; //уменьшаем минимальную длину на кол-во букв в алфавитеъ
- freopen("input.txt","r",stdin); //читаем вход сначала
- while (scanf("%c", &c) == 1) { //для каждого символа
- PrevChar(c,min, count); //выводим min-ный предыдущий символ алфавита
- //NextChar(c,min, count); //выводим min-ный следующий символ алфавита
- }
- fclose (stdout);
- fclose (stdin);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement