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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2015, 15:18   #1
Кроки
Новичок
Джуниор
 
Регистрация: 12.04.2015
Сообщений: 1
По умолчанию Програма для сдвига символов на заданую позицию.

Код:
Код:
string key=" ";//Существуе переменая типа
string a=" ";//Существуе переменая типа
string c=" ";//Существуе переменая типа
 
cin >> key;//Произведём вод с клавиатуры
 
cin >>a;//Произведём вод с клавиатуры
 
 
int m = key.size();//Найдём длину водимого текса для строки ключа
 
for (i=0;i<<a.size();i++){ //Проиведем сдвиг символом в строке "а" на значение ключа.K
 
int b=key[i]%(m+1);[I]//Kлюч может быть короче текста по этому ограничим его изменения от 0 символа в строке кей[i] до 
кей[a.size] при пересечении порога  кей[a.size] вернем его значения к 0
 символу строки с помощью key mod (m+1).m +1 использум поскольку
 когда номер символа ключа будет совпадать с длиной строки, мы вернём
 значение 0 символа в строке не учтя последний.Т.е кей[a.size]=7, 
b[7].7  mod 7=0. При добавлении 1 к длине кей[a.size].7 mod 8=1.При 
выходе за пределы количества символов строке ключа 8 mod 8=0 .Т.е 0
 символа строки кей[0]. 

int f=a[i]-128;//Приведём нумерацию символов русского 
алфавита к классическому нумерованию(только для верхнего регистра)В
 ASCII буква А имеет код 128 при пр классической нумерации от 0 до31
 
int g=(a[i]+b[i])%32;[I][I]//По скольку результат сложения может выйти за пределы 31 мы должны возвращать 
его в эту область (a+b)mod32.Почему берём 32, а не 31.Буква я 
имеет код 31.Произведём сдвиг буквы Ю на 1 символ.30+1mod 31=0.Вместо буквы я получим букву А.
 
c.push_back(char(g[i]+128));Выводим символ сдвинутый на значения ключа.
}
Внимание вопрос.При длине ключа меньшей длине водимого текста.
Текст АБВГД
Ключ 123
Получаем БГЕРЕ
Символы Р,Е не соответствует своим реальным значениям при сдвиге.Символ Р получается при сдвиге на мусорное значения позиции.Е при сдвиги на первый символ ключа ,т.е на 1цу.
Хотя по идее int b=key[i]%(m+1) при таком раскладе должен возвращать значение 0,т.е key[i=0] ,что соответствует первому символу в строке кей.
Не ужели нумерация символов в string начинается с 1деницы?

Последний раз редактировалось Кроки; 12.04.2015 в 15:28.
Кроки вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
програма для Зачисление зарплаты Kindan Помощь студентам 10 24.09.2012 13:51
Програма для регистрации NNN32 Помощь студентам 1 06.07.2010 10:33
Програма для нахождения НОД Draips Помощь студентам 1 26.04.2010 10:49
Где найти тесты для тестирования кандидатов на позицию программиста? lexluther Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 28.01.2007 13:29