Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 9
1

Нужно разобраться с кодом

28.12.2020, 10:42. Просмотров 1814. Ответов 2
Метки нет (Все метки)

Вот что должна делать программа. Найти во входной строке самую внутреннюю пару скобок {...} и переписать в выходную строку содержащиеся между ними символы. Во входной строке фрагмент удаляется. Повторять этот процесс, пока во входной строке не останется скобок, остаток также переписать в выходную строку. ТАКОЙ длолжен быть результат
vvedite stroku: {qqq{www{eee{{}}r}t}
eeerwwwrt{qqq

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
#include <stdio.h>
 
int find(char c[]){
    int i, b;// i - индекс в строке, b - индекс максимальной {
    for (i = 0, b = -1; c[i] != 0; i++)
    {
        if (c[i] == '}')
            return b;
        if (c[i] == '{')
            b = i;
    }
    return b;
}
 
void copy(char c1[], char c2[]){
    int i = 0;// Индекс в выходной строке
    int k, n, m;//k - индекс найденного фрагмента, n -  запоминание начала фрагмента, m - счётчик фрагментов
    k = find(c1);
    for (m = 1; k != -1; m++)// Пока есть фрагменты
    {
        for (n = k; c1[k] != '}'; k++, i++)// Переписать фрагмент и его "}"
            c2[i] = c1[k];
        c2[i++] = c1[k++];
        for (c1[k] != 0; k++, n++)
            c1[n] = c1[k];
        c1[n] = 0;         // сдвинуть " хвост" к началу
        k = find(c1);
    }     
    for (k = 0; c1[k] != 0; k++, i++)// Перенести остаток входной строки
        c2[i] = c1[k];
    i++;
    c2[i] = '\0';
}
 
void F(char c3[]){
    char z = '}';// Удаление из строки всех вхождений символа }
    int i = 0;// Индекс для исходной строки
    int j = i;// Индекс для модифицированной строки
    // Цикл модификации исходной строки
    while (c3[i] != 0)// Пока в строке не нулевой байт
    {
        // Проверить текущий символ строки
        if (c3[i] != z)// Если c[i] не равен }
        // Переписать текущий символ строки по новому индексу j и увеличить индекс j единицу
            c3[j++] = c3[i];
        i++;
    }
    c3[j] = '\0';
}
 
void F2(char c3[]){
    char z = '{';// Удаление из строки всех вхождений символа {
    int i = 0;// Индекс для исходной строки
    int j = i;// Индекс для модифицированной строки
    // Цикл модификации исходной строки
    while (c3[i] != 0)// Пока в строке не нулевой байт
    {
        // Проверить текущий символ строки
        if (c3[i] != z)// Если c[i] не равен {
        // Переписать текущий символ строки по новому индексу j и увеличить индекс j единицу
            c3[j++] = c3[i];
        i++;
    }
    c3[j] = '\0';// Запись нулевого байта в конец модифицированной строки
}
 
int main() {
    char a[80], d[80];
    printf("vvedite stroku:\n");
    gets(a);
    copy(a, d);
    F(d);
    F2(d);
    printf("result %s\n", d);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2020, 10:42
Ответы с готовыми решениями:

Turbo C 2.01- нужно разобраться с кодом и создать скриншоты вводимого и уже отформатированного текста
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; /* ==================== Описание функций...

Подскажите пожалуйста разобраться с кодом
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #define c 0.7 int main() { float...

Подскажите как разобраться с кодом и таблицей
Подскажите как исправить текущий код, чтобы таблица (рамка) была ровненькой, буду очень благодарен...

Помогите разобраться с кодом make-файла
Уважаемые коллеги, всем привет! Подскажите, пожалуйста, меняется ли язык командной оболочки в...

2
173 / 132 / 52
Регистрация: 18.07.2017
Сообщений: 694
28.12.2020, 19:15 2
Цитата Сообщение от Ринад Посмотреть сообщение
Нужно разобраться с кодом
У тебя тут склад велосипдов Учись пользоваться стандартной библиотекой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
char* start(char* src){
    char* cut_first, *cut_end = 0;
    if(cut_first = strchr(src, '{')){
        cut_end = start(cut_first+1);
        cut_first = strtok(src, "{");
    }
    else cut_first = src;
    char* next = strchr(cut_end ? cut_end : src, '}');
    if(next) next[0] = '\0';
    printf("%s", src);
    if(cut_end) printf("%s", cut_end);
    return next+1;
}
 
int main() {
    char a[80] = "aaa{bbb{ccc{}d}e}";
    puts(a);
    start(a);
}
Добавлено через 4 минуты
И писать красиво и понятно, а не так как я)
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 9
28.12.2020, 20:29  [ТС] 3
Хорошо, благодарю)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2020, 20:29

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

Нужно разобраться с кодом
Здравствуйте! Есть вот такой код длинного деления: const Max = 255; type Mas = Array...

нужно разобраться с кодом
увидел вот такую штуку type TMy = procedure (Name : String; id, col: Integer); вот ее вызов ...

нужно разобраться с кодом
вот задание Запрограммировать следующие процедуры и функции: а) поиск записи, б) вывод записи,...

Нужно разобраться с кодом
Нужно реализовать код, не пойму в чём ошибки &lt;html&gt; &lt;head&gt; &lt;title&gt;PHP Subnet...

Нужно разобраться с кодом
что делается в 6 строке и с 44-60? #include &lt;iostream&gt;; #include &lt;string.h&gt;; using namespace...

нужно разобраться с кодом
#include &lt;iostream&gt;//подключение библиотек using namespace std; typedef int* stroka; ...


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

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

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