Удалить символы, что находяться в скобках - C (СИ)
Формулировка задачи:
Задаеться строка...ну вы поняли
Решение задачи: «Удалить символы, что находяться в скобках»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main() {
char text[256];
int brackets = 0; // Счётчик открывающихся скобок
unsigned begin = 0; // Позиция первой открывающийся скобки
unsigned i = 0;
fgets(text, sizeof(text), stdin);
// Перебираем все символы строки
while (i < strlen(text)) {
switch (text[i]) {
case '(':
// В случае если встретили открывающуюся скобку
// и она является первой, то мы запоминаем её позицию
// Кроме этого постоянно инкрементируем счётчик
// открывающихся скобок
if (++brackets == 1) {
begin = i;
}
break;
case ')':
// В случае если встречаем закрывающую скобку
// и она относится именно к первой открывающийся, то
// мы перемещаем всё что за закрывающейся скобкой на
// позицию первой открывающейся
if ((brackets > 0) && (--brackets == 0)) {
memmove(&text[begin], &text[i + 1], strlen(&text[i]));
i = begin - 1;
}
break;
}
++i;
}
printf("%s", text);
return 0;
}
Объяснение кода листинга программы
- В начале кода объявляются три переменные: text, brackets и begin.
- Переменная text является массивом символов, в который будет считываться строка.
- Переменная brackets используется как счётчик открывающих скобок.
- Переменная begin хранит позицию первой открывающей скобки.
- Затем считывается строка с помощью функции fgets.
- Далее в цикле while происходит перебор всех символов строки.
- В случае если встречается символ '(', то выполняется проверка: если это первая открывающая скобка, то запоминается её позиция и увеличивается счётчик.
- В случае если встречается символ ')', то выполняется проверка: если это закрывающая скобка, относящаяся к первой открывающей скобке, то все символы, находящиеся между ней и первой открывающей скобкой, перемещаются в начало строки, после чего счётчик закрывающих скобок уменьшается на единицу.
- В конце выводится на экран полученная строка.
- В конце кода возвращается 0, что означает успешный конец работы программы.