Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 4

Декодирование строки

09.10.2015, 18:01. Показов 5056. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане!
Не могли бы Вы помочь в решение задачи, уже часа 3 ломаю голову (я не программист).

Дан строка 101010101. Нужно посчитать (т.е. написать программу на С++, которая это сделает) сколькими способами можно ее расшифровать, если A=01, B=10, C=101, D=1010.

Заранее благодарен за любую помощь!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2015, 18:01
Ответы с готовыми решениями:

Декодирование
Декодирование закодированного текста. У меня программа декодирует посимвольно, т.е. например текст закодирован вот так: 24, он берет...

Арифметическое декодирование
Всем привет. Нужна помощь по арифметическому декодированию. Есть арифметическое кодирование: #include <iostream> using...

Кодирование и декодирование
Всем привет. Народ,у меня такая проблема, есть код который кодирует и декодирует текст. Но вот проблемка, если закомментировать все функции...

5
 Аватар для Barrent
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
09.10.2015, 19:08
Лучший ответ Сообщение было отмечено Bertig как решение

Решение

Как-то так. Задачка вообще на обход дерева.
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
 
using namespace std;
 
vector<string> cipher;          //шифр
 
//узел дерева
class Node {
public:
    char letter;                //буква текущего узла
    bool complete;              //флаг окончания дешифровки слова
    vector<Node*> children;     //все возможные варианты следующей буквы
 
    Node(){
        complete = false;
        letter = 0;
    }
 
    //дешифровка
    //str - исходное зашифрованное слово
    //index_start - позиция поиска следующей зашифрованной буквы
    void Decode(string& str, int index_start = 0) {
        //если строка дешифрована
        if (index_start >= str.length()) {
            complete = true;
            return;
        }
        Node* child;
        for (int i = 0; i < cipher.size(); i++) {
            //если дальше в строке может быть зашифрованная буква cipher[i]
            if (str.find(cipher[i], index_start) == index_start) {
                child = new Node();
                child->letter = 'A' + i;                                            //записываем дешифрованную букву
                child->Decode(str, index_start + cipher[i].length());               //потомок ищет своих потомков
                children.push_back(child);                                          //записываем потомка   
            } 
        }
    }
 
    //Поиск всех возможных вариантов (обход дерева)
    //words - все возможные варианты
    //word - текущий вариант
    void ReadValues(vector<string*>* words, string* word = nullptr) {
        //если корень дерева
        if (word == nullptr)
            word = new string();    
        //добавляем к текущему слову букву текущего узла дерева
        if (letter != 0)
            word->push_back(letter);
        //если слово целиком удачно расшифровано
        if (complete) {
            words->push_back(word);
            return;     //выход из функции
        }
        //поиск всех возможных ваинатов продолжения текущего слова
        string* copy;
        for (int i = 0; i < children.size(); i++) {
            copy = new string();
            *copy = *word;
            children[i]->ReadValues(words, copy);
        }
    }
};
 
 
int main()
{
    //записываем шифр, индекс в массиве соовтетствует позиции буквы в алфавите: 0 = A, 1 = B, etc.
    cipher.push_back("01");
    cipher.push_back("10");
    cipher.push_back("101");
    cipher.push_back("1010");
 
    //исходное зашифрованное слово
    string str = "101010101";
 
    //дешифровка
    Node* decoder = new Node();
    decoder->Decode(str);
 
    //собираем все варианты
    vector<string*> decoded;
    decoder->ReadValues(&decoded);
    cout << "Decoded " << decoded.size() << " possible words:" << endl;
    for(string* sentence: decoded){
        cout << *sentence << endl;
    }
 
    system("pause");
    return 0;
}
2
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 4
09.10.2015, 19:45  [ТС]
Большое спасибо)
0
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 4
15.10.2015, 13:17  [ТС]
Вообще задачу можно решить гораздо легче, придумал способ, выложу, вдруг кому пригодиться

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
#include <iostream>
#include <string>
 
using namespace std;
    
    int count = 0;
    
    void rec(string str) {
    if (str == "") {
    count++;
    return;
    }
    if (str.find("01") == 0) rec(str.substr(2));
    if (str.find("10") == 0) rec(str.substr(2)); 
    if (str.find("101") == 0) rec(str.substr(3)); 
    if (str.find("1010") == 0) rec(str.substr(4));
    return;
    }   
 
    int main(int argc, char** argv) {
    string s;
    cout<<"Enter your line: "<<endl;
    getline(cin, s);
    rec(s);
    cout<<count<<endl;
    system("PAUSE");
    return 0;
    }
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
15.10.2015, 14:26
Bertig, я вообще не вижу, где тут задача.
строку 1010 можно интерпретировать и как BB и как D одновременно!
0
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 4
15.10.2015, 14:42  [ТС]
Первый пост прочитайте заново
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2015, 14:42
Помогаю со студенческими работами здесь

Декодирование информации
как на с++ декодировать информацию(текст)

Неравномерное декодирование
У меня есть код морзе, но без пробелов, помогите написать программу, которая выведет возможные варианты декодирования этого кода.

Декодирование алгоритма NZRI
Здравствуйте, как можно сделать декодирование алгоритма NZRI? Вот мой пример кодирования: for(int i=0; i&lt;n;i++){ ...

Кодирование/Декодирование текста
Создать приложение с графическим интерфейсом в любой визуальной среде разработки, выполняющее следующие действия: 1) Пользователь...

Кодирование-декодирование изображений
Нужна программа с++, которая кодирует изображение в изображение(и обратно), используя при этом 2 младших бита. Есть программа, которая...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru