С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MK_9
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 11
#1

Свертка повторяющихся подстрок по следующим правилам - C++

11.04.2012, 03:40. Просмотров 508. Ответов 3
Метки нет (Все метки)

Помогите, не могу понять задание.
В заданной строке символов выполнить свертку повторяющихся подстрок по следующим правилам: а) несколько последовательных повторений одной и той же подстроки заменяются так: хххх на 4(х), уbcbcх на у2(bc)х; б) это правило можно применять дважды, например: 4(х)b4(х)b заменяется на 4(4(х)b).

Добавлено через 11 часов 24 минуты
Может у кого-нибудь подобное задание есть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 03:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Свертка повторяющихся подстрок по следующим правилам (C++):

Лифт работает по следующим правилам - Delphi
Лифт работает по следующим правилам: 1.Лифт едет с 1 этажа на все этажи кроме 2,3,4. 2.При спуске вниз лифт останавливается на всех...

Поиск повторяющихся подстрок в строке - C#
Дана строка символов например "авсавсавс". Необходимо найти повторение "авс" и указать сколько таких повторений: 3авс Есть ли метод,...

Сформировать новый массив Zm по следующим правилам - Pascal
Даны 2 одномерных массива Xn и Yn. Сформировать новый массив Zm по следующим правилам: если Xi>i и Yi>i то Zk=Xi+Yi. Отсортировать исходный...

Получить двумерный массив по следующим правилам - Pascal ABC
Получить двумерный массив по следующим правилам: элементы главной диагонали равны 1, ниже главной диагонали - 0, выше - сумме своих...

Создайте двумерный массив [n][m] и заполните его по следующим правилам: - Free Pascal
Даны два числа n и m. Создайте двумерный массив и заполните его по следующим правилам: Числа, стоящие в строке 0 или в столбце 0 равны 1...

Создайте двумерный массив [n][m] и заполните его по следующим правилам - Pascal
Здравствуйте. Помогите пожалуйста неумехе. Плохо понимаю Pascal :( Задания: 3) Даны два числа n и m. Создайте двумерный массив...

3
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
11.04.2012, 06:00 #2
MK_9, А что не понятно? Есть текст, его нужно сделать меньше, но что бы потом можно было его восстановить. Например "qqqqqqqq" занимает 8 байт, что мешает нам написать "q" один раз и просто поставить отметку, что его нужно повторить 8 раз, то есть получится "8(q)" , а это уже 4 байта, сжатие в два раза ) . Однако повторения могут быть не одного символа а нескольких, например "qwqwqwqwqwqw", так же пишем 6(qw).
В итоге получаешь сжатый текст, но что мешает по этому тексту пройтись еще раз, ведь могут появиться новые повторяющиеся строки....и так, пока возможности для сжатия не исчерпаются.
0
MK_9
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 11
15.04.2012, 12:49  [ТС] #3
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
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
 
 
 void main(void)
{
    setlocale(0,"RUS");
    char h;
    cout <<"Здравствуйте"<< endl
        <<"Желаете начать работу, y/n? ";
    cin >> h;
    while (h!='n')
    {   
     int i=0, j=0;
     char *st = new char [512];
     char *st1 = new char [512];
     char *st2 = new char [512];
     cout <<"Введите строку: ";
     cin.get();
     cin.getline(st,255);
     int n=strlen(st);
 
      while (i < n)
      {
           if (st[i] == 'x' && st[i+1] == 'x' && st[i+2] == 'x' && st[i+3] == 'x')
           {
              st1[j] = '4';
              st1[j+1] = '(';
              st1[j+2] = 'x';
              st1[j+3] = ')';
              j = j+4;
              i = i+4;
           }
           if (st[i] == 'y' && st[i+1] == 'b' && st[i+2] == 'c' && st[i+3] == 'b'&& st[i+4] == 'c'&& st[i+5] == 'x') 
           {
              st1[j] = 'y';
              st1[j+1] = '2';
              st1[j+2] = '(';
              st1[j+3] = 'b';
              st1[j+4] = 'c';
              st1[j+5] = ')';
              st1[j+6] = 'x';
              j = j+7;
              i = i+7;
           }
         else
           {
              st1[j] = st[i];
              j=j+1;
              i=i+1;
           }
      }
      
          cout <<("Полученная строка:\n");
      st1[n]='\0';
          cout << st1 << endl;
      char t;
      cout <<"Применить правило дважды, y/n? ";
      cin >> t;
    while (t!='n')
    { ????
        if (st1[i] == '4' && st1[i+1] == '(' && st1[i+2] == 'x' && st1[i+3] == ')'&& st1[i+4] == 'b' && st1[i+5] == '4' && st1[i+6] == '(' && st1[i+7] == 'x' && st[i+8] == ')' && st1[i+9] == 'b') 
           {
              st2[j] = '4';
              st2[j+1] = '(';
              st2[j+2] = '4';
              st2[j+3] = '(';
              st2[j+4] = 'x';
              st2[j+5] = ')';
              st2[j+6] = 'b';
              st2[j+7] = ')';
              j = j+8;
              i = i+10;
           }
         else
           {
              st1[j] = st[i];
              j=j+1;
              i=i+1;
    }
    }
      cout << "Желаете повторить работу, y/n? ";
        cin >> h;
    }
}
Как повторно применить 4(х)b4(х)b заменяется на 4(4(х)b) ?
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
15.04.2012, 14:30 #4
4(х)b4(х)b заменяется на 2(4(х)b) а у тебя в задании это опечатка
0
15.04.2012, 14:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 14:30
Привет! Вот еще темы с ответами:

По результатам сдачи экзаменов в сессию решено назначить стипендию по следующим правилам - JavaScript
(условие этой сделанной задачи): При решении задачи поступим следующим образом. Вычислим максимальную и минимальную из оценок,...

Дана матрица A(n.m). Получить вектор B(n), элементы которого получены по следующим правилам: - Pascal
Дана матрица A(n..m). Получить вектор B(n), элементы которого получены по следующим правилам: bi=ij,min aji], где j=1..n или...

Дан одномерный массив В, состоящий из 2n элементов. Переставить его элементы по следующим правилам - Turbo Pascal
Дан одномерный массив В, состоящий из 2n элементов. Переставить его элементы по следующему правилу: b, b,...,b, b, b,..., b.

Дан текст. Преобразовать его по следующим правилам: удалив все символы, не являющимися буквами; - Pascal ABC
через string


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

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

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