Удалить группу символов, расположенных между круглыми скобками, включая сами скобки - C (СИ)
Формулировка задачи:
Добрый вечер, форумчани.
Помогите пожалуйста с задачкой:
Удалить группу символов, расположенных между круглыми скобками, включая сами скобки.
Как должен выглядеть цикл обработчика на языке С?Решение задачи: «Удалить группу символов, расположенных между круглыми скобками, включая сами скобки»
textual
Листинг программы
#include <stdio.h>
char* RemoveBrackets(char s[ ]) {
unsigned i, j = 0, br = 0;
for (i = 0; s[i]; i++) {
if (s[i] == '(')
br++;
else if (s[i] == ')')
if (br)
br--;
else
s[j++] = s[i];
else if (!br)
s[j++] = s[i];
}
s[j] = '\0';
return s;
}
int main() {
char s[ ] = "printf(\"%s\\n\", RemoveBrackets(s));";
printf("%s\n", RemoveBrackets(s));
getchar();
}
Объяснение кода листинга программы
- В данном коде представлена функция
RemoveBrackets, которая принимает на вход строкуsи возвращает новую строку, в которой удалена группа символов, расположенных между круглыми скобками, включая сами скобки. - В функции используется четыре переменные:
i- инициализируется значением 0 и используется как счетчик символов входной строки.j- инициализируется значением 0 и используется как индекс для записи символов в новую строку.br- инициализируется значением 0 и используется как счетчик количества открытых скобок.s- входная строка.
- В цикле
forпроисходит проход по всем символам входной строки. - Если текущий символ равен
(, то увеличивается значение переменнойbr. - Если текущий символ равен
), то выполняется проверка: если значение переменнойbrбольше 0, то оно уменьшается на 1. - Если текущий символ не равен
(, то выполняется проверка: если значение переменнойbrравно 0, то символ копируется в новую строку. - Если текущий символ не равен
), то выполняется проверка: если значение переменнойbrбольше 0, то символ копируется в новую строку. - Если текущий символ равен
), и значение переменнойbrравно 0, то выполняется пропуск этого символа. - Если текущий символ равен
), и значение переменнойbrбольше 0, то выполняется уменьшение значения переменнойbrна 1. - Если текущий символ не равен
), и значение переменнойbrравно 0, то выполняется пропуск этого символа. - Если текущий символ не равен
), и значение переменнойbrбольше 0, то выполняется уменьшение значения переменнойbrна 1. - После завершения цикла
forв новую строку добавляется символ\0, который обозначает конец строки. - Функция возвращает новую строку.
- В функции
mainсоздается массивsсо значениемprintf(\%s\n`, RemoveBrackets(s));`. - Функция
RemoveBracketsвызывается с аргументомsи результат выводится на экран с помощью функцииprintf. - В конце программы ожидается нажатие клавиши с помощью функции
getchar.