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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
LTony
0 / 0 / 0
Регистрация: 23.01.2012
Сообщений: 21
#1

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

10.02.2012, 16:40. Просмотров 706. Ответов 4
Метки нет (Все метки)

Помогите реализовать програмку:
Дано скобочное выражение, оканчивающееся точкой с запятой.
Само выражание программа должна запрашить у пользователя.
Проверить правильность расстановки скобок в данном выражении.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2012, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скобочное выражение (C++):

Правильное скобочное выражение - C++
Не могу придумать как записать условие в 22 строке. Нужно чтобы если в вершине стека что то из ( { #include<iostream> #include<stack> ...

Проверить является ли скобочное выражение правильным - C++
Является ли выражения вида ()()()()()())))()( правильным, на вход подается символы '(' и ')' в любой последовательности.

Дано скобочное выражение, оканчивающееся точкой с запятой - C++
Дано скобочное выражение, оканчивающееся точкой с запятой. Определить: количество уровней вложенности скобок в выражении.

Дано скобочное выражение, оканчивающееся точкой с запятой - C++
Дано скобочное выражение, оканчивающееся точкой с запятой. Определить: количество уровней вложенности скобок в выражении.

Подставить в заданное выражение знаки +,-,*,/ так, чтобы выражение было истинным - C++
Помогите плз! Надо подставить в заданное выражение знаки +,-,*,/ так, чтобы выражение было истинным: ((((((1 2) 3) 4) 5) 6)=36 ...

Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» — True, «F» — False): <выражение> : - C++
помогите пожалуйста решить задачку на рекурсию Вывести значение логического выражения, заданного в виде строки S. Выражение определяется...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.02.2012, 16:50 #2
Так как-то
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
#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 ( stack.empty() ||
            (str[i] == ')' ^ stack.top() == '(' ) ||
            (str[i] == '}' ^ stack.top() == '{' ) ||
            (str[i] == ']' ^ stack.top() == '[' )   )
            {
                return false;
            }
           
            stack.pop();
        }
    }
   
    return stack.empty();
}
1
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
10.02.2012, 16:58 #3
C++
1
2
3
4
if ( stack.empty() ||
            (str[i] == ')' ^ stack.top() != '(' ) ||
            (str[i] == '}' ^ stack.top() != '{' ) ||
            (str[i] == ']' ^ stack.top() != '[' )   )
?
0
LTony
0 / 0 / 0
Регистрация: 23.01.2012
Сообщений: 21
10.02.2012, 18:25  [ТС] #4
Цитата Сообщение от neske Посмотреть сообщение
C++
1
2
3
4
if ( stack.empty() ||
            (str[i] == ')' ^ stack.top() != '(' ) ||
            (str[i] == '}' ^ stack.top() != '{' ) ||
            (str[i] == ']' ^ stack.top() != '[' )   )
?
что то не правильно?
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.02.2012, 19:11 #5
Цитата Сообщение от 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();
}
Разница в том, что учитывает, что могут встречаться другие символы кроме скобок + убрал лишние предупреждения.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2012, 19:11
Привет! Вот еще темы с ответами:

Выражение на С++ - C++
После нажатия на push, вычисляется сумма m_1 и m_2. Результат появляется в диалоговом окне m_3 Нужно подставить вот это выражение ...

Выражение - C++
Подскажите пожалуйста что обозначают эти два выражения: image-&gt;origin = frame-&gt;origin status = (char*)cvAlloc(MAX_COUNT)

Выражение - C++
Подскажите пожалуйста! Как можно расставить между числами знаки &quot;+&quot; и &quot;-&quot;?? Например! На входе: 15 30...

выражение - C++
что значит след. выражение: n&lt;?=n2;?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.02.2012, 19:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru