Для подсчета правильно расположенных круглых скобок в массиве char вам потребуется использовать стек.
Стек - это структура данных, которая работает по принципу "последний пришел - первый ушел" (LIFO). Он имеет две основные операции - добавление элемента в начало стека (push) и удаление элемента из начала стека (pop).
Алгоритм решения этой задачи следующий:
1. Создайте пустой стек, в котором будут храниться открывающие скобки '('.
2. Проходите по каждому символу в массиве char.
3. Если текущий символ - открывающая скобка '(', положите ее в стек.
4. Если текущий символ - закрывающая скобка ')', проверьте:
а. Если стек пустой, то закрывающая скобка не имеет соответствующей открывающей скобки, и количество правильно расположенных скобок не увеличивается.
б. Если стек не пустой, удалите верхний элемент стека (последнюю добавленную открывающую скобку '(').
5. Повторяйте шаги 3-4 для всех символов массива char.
6. После обработки всех символов, если стек пустой, то все открывающие и закрывающие скобки нашли соответствие, и количество правильно расположенных скобок равно количеству символов в массиве char. Если стек не пустой, значит есть открывающие скобки, для которых не было найдено соответствующей закрывающей скобки, и количество правильно расположенных скобок будет меньше количества символов в массиве char.
Вот пример кода на языке C++, реализующего описанный алгоритм:
#include <iostream> #include <stack> int countValidParentheses(char* arr, int size) { std::stack<char> parenthesesStack; int validCount = 0; for (int i = 0; i < size; i++) { if (arr[i] == '(') { parenthesesStack.push(arr[i]); } else if (arr[i] == ')') { if (!parenthesesStack.empty()) { parenthesesStack.pop(); validCount++; } } } if (parenthesesStack.empty()) { return validCount; } else { return -1; // Возвращаем -1, если есть непарные открывающие скобки } } int main() { char arr[] = {'(', '(', ')', ')', ')', '('}; int size = sizeof(arr) / sizeof(arr[0]); int validParenthesesCount = countValidParentheses(arr, size); if (validParenthesesCount != -1) { std::cout << "Количество правильно расположенных скобок: " << validParenthesesCount << std::endl; } else { std::cout << "Обнаружены непарные открывающие скобки." << std::endl; } return 0; }
В примере мы проверяем массив символов arr, содержащий скобки, и выводим количество правильно расположенных скобок. Если обнаруживаются непарные открывающие скобки, выводится соответствующее сообщение.