Лабораторная работа №6 по дисциплине «Информатика и программирование»



Дата25.03.2022
өлшемі29,02 Kb.
#136758
түріЛабораторная работа
Байланысты:
Laba 6


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Лабораторная работа №6
по дисциплине «Информатика и программирование»
Символы. Строки. Текст
Группа: АИ-12
Студент: Казанцев А. Попов А.
Преподаватель: Копылова О.А.

НОВОСИБИРСК 2021




Задание 7. Найти во входной строке самую внутреннюю пару скобок {...} и переписать в выходную строку содержащиеся между ними символы. Во входной строке фрагмент удаляется. Повторять этот процесс, пока во входной строке не останется скобок, остаток также переписать в выходную строку.


Текст программы с комментариями
#include

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 (n, k ; 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];

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", d);
}


Пример работы программы:

Выводы: Программа решает поставленную задачу без проверки размерности выходной строки и наличия циклических ссылок.

Достарыңызбен бөлісу:




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет