Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Работа со стеком (проверить правильность расстановки скобок) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ int main() и его return(узнать код завершения программы в cmd) http://www.cyberforum.ru/cpp-beginners/thread821847.html
Доброе утро всем. Вопрос таков. Если в конце программы мы поставим ретерн 15(а не 0), то как узнать чему равен мэйн, если не видеть этот ретерн, и если мы выполняем задачу в кмд, то как там узнать...
C++ Классы и обьекты в С++ очень прошу помочь написать программу. т.к. в программировании я 0:( Написать программу, в которой создаются и разрушаются объекты, определенного пользователем класса. Выполнить исследование вызовов... http://www.cyberforum.ru/cpp-beginners/thread821824.html
C++ Как разделить переменую типа double на целое и дробное число ?
Как разделить переменую типа double на целое и дробное число ? Добавлено через 23 минуты Нашол решение : #include <iostream> #include <windows.h> using namespace std; void main()...
C++ Создать двумерный массив, который будет представлять декартову плоскость
нужно создать двумерный массив, который будет представлять декартову плоскость то есть чтобы координаты можно было задавать отрицательными, к примеру cin>>array; не могу понять, как...
C++ Создать шаблон класса,реализующий буфер из 5 вещественных чисел. Числа ввести с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread821791.html
Создать шаблон класса,реализующий буфер из 5 вещественных чисел. Числа ввести с клавиатуры содержимое буфера вывести на экран вроде бы всё правильна написано, но не компилируется,помогите...
C++ Синтаксический сахар для for структура for_each предельная понятна, но как sort для базовых типов получается только два параметра. Возможно использовать for_each как-то так? for_each(v.begin(),v.end()) { //some do v... подробнее

Показать сообщение отдельно
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
29.03.2013, 09:43
Мне не очень нравится вариант с постоянным поиском подстроки. С учетом не слишком большого числа скобок, можно сделать отдельные вычисления или даже заинлайнить.
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
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <string>
#include <stack>
 
bool isOpenBracket(char symbol) {
  return symbol == '(' || symbol == '{' || symbol == '[';
}
 
bool isClosingBracket(char symbol) {
  return symbol == ')' || symbol == '}' || symbol == ']';
}
 
char getOpenBracketPair(char bracket) {
  return (bracket == '}') ? '{' : (bracket == ')') ? '(' :
    (bracket == ']') ? '[' : '\0';
}
 
bool areParenthesesGood(const std::string &source) {
  std::stack<char> stack;
  for (size_t i = 0; i < source.size(); ++i) {
    if (isOpenBracket(source[i])) {
      stack.push(source[i]);
    } else {
      if (isClosingBracket(source[i])) {
        char openBracket = getOpenBracketPair(source[i]);
        if (!stack.empty() && stack.top() == openBracket) {
          stack.pop();
        } else {
          return false;
        }
      }
    }
  }
  return stack.empty();
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  std::string expression = "{x+(g-[f+h]*c)-(q+w)}";
  std::cout << areParenthesesGood(expression) << std::endl;
  
  std::cin.get();
  return 0;
}
4
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru