решил сделать сам Шифратор/Дешифратор Виженера, но столкнулся с какой-то не понятной проблемой:
// Шифратор и дешифратор шифра Виженера.
#include<iostream>
#include<iomanip>
#include<string>
#define e endl
using namespace std;
int main(){
setlocale(LC_ALL, "Russian");
string x, y, z;
int a, b, c;
cin >> x;
cin >> y;
short int r = 33;
string alf = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
int d = 0;
for( int i = 0 ; i < x.size() ; i++ )
{
// cout << 124;
if( d > y.size())
{
d = 0;
}
//cout << 124;
b = 0;
while( x[i] != alf[b] )
{
b++;
}
// cout << 124;
c = 0;
while( y[d] != alf[c] )
{
c++;
}
//cout << 124;
a = b + c;
if( a > r )
{
a = a - r;
}
//cout << 124;
z += alf[a];
//cout << 124;
d++;
//cout << 124;
}
cout << z;
return 0;
}
После ввода двух слов( x - слово которое шифруется, y - ключ шифрования ) у меня крашится программа. После того как я посмотрел после какого действия у меня не выводит "124", я понял, что это после этого фрагмента:
c = 0;
while( y[d] != alf[c] )
{
c++;
}
Не вижу ничего такого, что могло поломать программу, может быть вы увидите. p.s. Если не сложно, можете кинуть наработки по абсолютно любым шифраторам/дешифраторам на C++, буду благодарен... UPD: Проблема не в этом цикле, а чём то другом...
Проблема решается, если консоли явно указать кодировку для ввода символов SetConsoleCP(1251);
. Но это не отменяет необходимость проверять входные данные и проверять счетчики b
и c
на допустимость значений.
// Шифратор и дешифратор шифра Виженера.
#include<iostream>
#include<iomanip>
#include<string>
#include <windows.h>
#define e endl
using namespace std;
int main(){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
string x, y, z;
int a, b, c;
cin >> x;
cin >> y;
// на всякий случай проверяем значения:
cout << "x = " << x << "\n";
cout << "y = " << y << "\n";
short int r = 33;
string alf = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
int d = 0;
for( int i = 0 ; i < x.size() ; i++ )
{
// cout << 124;
if( d > y.size())
{
d = 0;
}
//cout << 124;
b = 0;
while( x[i] != alf[b] )
{
b++;
}
// cout << 124;
c = 0;
while( y[d] != alf[c] )
{
c++;
}
//cout << 124;
// на всякий случай проверяем значения:
cout << "b = " << b << "\n";
cout << "c = " << c << "\n";
a = b + c;
if( a > r )
{
a = a - r;
}
//cout << 124;
z += alf[a];
//cout << 124;
d++;
//cout << 124;
}
cout << z;
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Где я могу найти исходный код Yandex speller, обыскал весь интернет, но не нашел, еще один вопрос есть ли yandex speller в качестве библиотеки для java?
Есть строка типа HaT523HaT524HaT525Подскажите, пожалуйста, как можно разбить эту строку так:
В чем ошибка-то? Он возмущается на строчки
Проблема в следующем: необходимо удалить повторяющиеся элементы ArrayList'аДля этого использую следующий код: