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

Скобочное выражение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не найдено обращение в классе http://www.cyberforum.ru/cpp-beginners/thread444002.html
Здравствуйте! У меня есть 3 файла (для наглядности загрузил их в архив): - main.cpp - главный файл программы - UFr.h - заголовочный файл модуля, в нем описан класс TFr - UFr.cpp - исходный файл модуля, в нем определены функции класса В исходном файле main.cpp создаю экземпляр класса, и вызываю конструктор (так как я предполагаю). Но в процессе компиляции выдается ошибка undefined...
C++ SetConsoleWindowInfo Здравствуйте! Небольшая ошибка в коде: #include <Windows.h> #include <Wincon.h> #include <iostream> using namespace std; int main() { http://www.cyberforum.ru/cpp-beginners/thread443956.html
CONSOLE_FONT_INFOEX C++
Здравствуйте! Набросал код, не работает: #include <Windows.h> #include <Wincon.h> #include <iostream> using namespace std; int main()
Работа с числами C++
Помогите составить программу. Даны: натуральное число n, действительные числа А1,А2,А3….Аn. Получить: сумму отрицатьльных и количество положительных членов последовательности A1,A2,A3….An.
C++ Элемент в массиве через двоичную систему поиска http://www.cyberforum.ru/cpp-beginners/thread443879.html
Нужно найти элемент в массиве через двоичную систему поиска и поставить счетчик, который вычислит количество операций сравнений.
C++ Рекурсивная функция Нужна программа,которая рекурсивно переводит числа из десятичной системы в двоичную. подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.02.2012, 19:11     Скобочное выражение
Цитата Сообщение от neske Посмотреть сообщение
C++
1
2
3
4
if ( stack.empty() ||
            (str[i] == ')' ^ stack.top() != '(' ) ||
            (str[i] == '}' ^ stack.top() != '{' ) ||
            (str[i] == ']' ^ stack.top() != '[' )   )
?
Ну если мы встретили закрывающую скобку(хотя да, я для скобочного выражения без лишних символов делал), то:
если стек пуст( нету открывающих скобок), то выражение неверное
или если тип открывающей скобки не соответствует типу закрывающей, то выражение также неверное.
Ну эту функцию я из задачи меньшикова скопипастил, вот более универсальная:
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
#include <iostream>
#include <stack>
#include <string>
 
bool is_correct( const std::string& );
 
int main()
{
    std::string str;
    for ( char ch; std::cin >> ch && ch != ';'; str.push_back(ch) );
   
    std::cout << ( is_correct(str) ? "Yes" : "No" ) << std::endl;
}
 
bool is_correct( const std::string& str)
{
    std::stack< char > stack;
   
    for (int i = 0; i < (int) str.length(); ++i)
    {
        if ( str[i] == '(' || str[i] == '{' || str[i] == '[' )
        {
            stack.push( str[i] );
        }
        else if ( str[i] == ')' || str[i] == '}' || str[i] == ']' )
        {
            if 
            ( 
                stack.empty() 
                || ( (str[i] == ')') ^ (stack.top() == '(') ) 
                || ( (str[i] == '}') ^ (stack.top() == '{') ) 
                || ( (str[i] == ']') ^ (stack.top() == '[') )   
            )
            {
                return false;
            }
           
            stack.pop();
        }
    }
   
    return stack.empty();
}
Разница в том, что учитывает, что могут встречаться другие символы кроме скобок + убрал лишние предупреждения.
 
Текущее время: 01:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru