Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.11.2018
Сообщений: 10
1

Шифрование Цезаря

04.03.2019, 19:01. Показов 1379. Ответов 4

Доброго времени суток, нужна Ваша помощь. Написан код и требуется, не много изменений. Шифр Цезаря, но у меня возникает проблема в том, что если между словами стоит пробел, программа его не ставит, я дописал и выдает правильно, но только большое количество пробелов.
Сам код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
 
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int key = 5;
            string slova = "мы должны"; // храню фразу, которую буду шифровать
            string shifr = ""; // храню результат шифрования
            string probel = " ";
            // string alf = "abcdefghijklmnopqrstuvwxyz"; // работаю с английским алфавитом
            string alfavit = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; // работаю с русским алфавитом
            int m = alfavit.Length;
            for (int i = 0; i < slova.Length; i++) // цикл перебора букв шифруемого слова
            {
                for (int j = 0; j < alfavit.Length; j++) // цикл сравнения каждой буквы с алфавитом
                {
                    if (slova[i] == alfavit[j]) // в случае совпадения, создаю переменную, где храню номер буквы со сдвигом
                    {
                        int novayabukva = j + key; // номер буквы + сдвиг по ключу
 
                        while (novayabukva >= m) // чтобы новая буква не уходила за рамки алфавита
                            novayabukva -= m;
 
                        shifr = shifr + alfavit[novayabukva]; // заношу зашифрованную букву в переменную, для ее хранения
                    }
                    if (slova[i] == Convert.ToChar(probel))
                        shifr = shifr + probel;
                }
            }
            Console.WriteLine("Зашифрованное слово:" + shifr);
            Console.ReadLine();
        }
    }
}
Выдаёт мне:
Зашифрованное слово:са(30 пробелов)иурлта
Хотя должно просто:са иурлта
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2019, 19:01
Ответы с готовыми решениями:

Улучшенное шифрование методом Цезаря
В общем столкнулся с проблемой дешифрования улучшенного алгоритма Цезаря. Помогите составить...

Шифрование и дешифрование текстовых файлов шифром Цезаря
Привет всем. Как переделать программу, чтобы не нужно было самому писать, а считывал с файла...

Как поменять результат шифрование \ Метод шифрование RSA
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой реализован метод...

Код Цезаря
Здравствуйте! Объясните пожалуйста выделенные строчки (35-57) кода цезаря. using System;...

4
265 / 152 / 44
Регистрация: 05.07.2018
Сообщений: 491
04.03.2019, 19:29 2
Лучший ответ Сообщение было отмечено Porello как решение

Решение

Porello, Перенесите это на одну фигурную скобку ниже.
C#
1
2
if (slova[i] == Convert.ToChar(probel))
                        shifr = shifr + probel;
1
862 / 542 / 290
Регистрация: 21.11.2012
Сообщений: 1,530
04.03.2019, 19:29 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int shift = 5;
            string words = "hallo, world!";
            char space = ' ';
            string alphabet = "abcdefghijklmnopqrstuvqxyz";
            string result = "";
 
            foreach(char c in words) 
            {
                var idx = alphabet.IndexOf(c);
 
                if (idx != -1)
                {
                    var index = shift + idx < alphabet.Length ? shift + idx : shift + idx - alphabet.Length;
                    result += alphabet[index];
                }
                else if (c == space) result += c;
            }
            Console.WriteLine("Slovo:" + result);
            Console.ReadLine();
0
20 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 792
05.03.2019, 05:28 4
Доброго всем здравия, духовного и телесного.
if (slova[i] == Convert.ToChar(probel))
почему нужно обязательно идти через Convert.
Почему так не работает?
C#
1
if (slova[i] == probel)
Добавлено через 1 минуту
32-ая строка
0
862 / 542 / 290
Регистрация: 21.11.2012
Сообщений: 1,530
05.03.2019, 21:45 5
gogaloh,

потому что пробел типа стринг, а слова(i) - чар

Добавлено через 59 секунд
объявите пробел как чар и будет вам счастье

C#
1
char probel = ' ';
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2019, 21:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Дешифратор Цезаря
Подскажите с дешифратором для Цезаря....заранее спасибо... char alphavit = { ...

алгоритм цезаря
здраствуйте!!! помогите пожалуйста решить задачу нужно написать программу для алгоритма цезаря

Шифр Цезаря
Алфавит представляет из себя массив символов и задается методом setAlphabet; Значение сдвига...

Шифр Цезаря
Хочу поделиться шифром Цезаря. Я взял код из интернета, точнее отсюда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.