Форум программистов, компьютерный форум CyberForum.ru

Таблица Виженера - C++

Восстановить пароль Регистрация
 
DemonAleks
Сообщений: n/a
12.02.2014, 19:23     Таблица Виженера #1
Здравствуйте, уважаемые. Я в программировании пока не очень силён, и поэтому не знаю множества нюансов. Пишу прогу, которая должна кодировать/декодировать текст по таблице Виженера. По сути она уже готова, отдельные слова и фразы без пробелов она кодирует без проблем. Но на пробеле почему-то спотыкается, хотя, как мне кажется, не должна... И ещё такой прикол. В конце я сделал 2 вывода полученной строки: посимвольно в основном цикле и после него строкой. Результат до пробела правильный, после пробела в первом случае пробел меняется на * и выводятся неизвестные символы (квадратики), а во втором случае он игнорирует пробел и дописывает необходимое кол-во символов, причём логику их появления я тоже не понимаю.
Буду рад любой помощи =)

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
#include <string>
#include <locale>
#include <Windows.h>
 
 
using namespace std;
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char alpb[33]={'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н',
            'о','п','р', 'с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'};
    int n,i,j,k,m,numk=-1, kkey, num;
    string key, txt, txtk;
    cout << "Кодировать(1) или декодировать(2)?" << endl;
    cin >> m;
    cin.ignore(256, '\n');
    if(m==1)
    {
        cout << "Введите ключ: ";
        getline(cin, key);
        cout << "Введите текст: ";
        getline(cin, txt);
        k=txt.length();
        kkey=key.length();
        for(i = 0; i < k; i++)
        {
            numk++;
            for(j = 0; j < 33; j++)
            {
                if(txt[i] == alpb[j])
                {
                    num = j;
                    for(j = 0; j < 33; j++)
                    {
                        if(key[numk] == alpb[j])
                        {
                            if((num+j)<=32)
                                txtk+=alpb[num+j];
                            else
                            {
                                txtk+=alpb[(num+j)-33];
                            }
                            break;
                        }
                    }
                    break;
                }
                else
                if (txt[i] == ' ')
                {
                    txtk[i] = '*';
                    break;
                }
            }
            if (numk==(kkey-1))
            {
                numk=-1;
            }
            cout << txtk[i] << " "; /*вывод, вариант первый*/
        }
        cout << endl << txtk << endl; /*вывод, вариант второй*/
    }
    system("pause");
}
Добавлено через 19 часов 44 минуты
Уже разобрался сам.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2014, 19:23     Таблица Виженера
Посмотрите здесь:

C++ Шифрование шифра Виженера
C++ Шифр Виженера
C++ Шифрование Методом Виженера На C++
Шифр Виженера C++
C++ Шифр Виженера, непонятки с работой формулы
Шифрование методов Виженера ДЛЯ РУССКИХ БУКВ C++
C++ Шифрование Виженера, объясните программу
C++ Шифр Виженера

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 15:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru