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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.71
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
#1

Баланс круглых скобок - C++

10.03.2011, 19:14. Просмотров 5445. Ответов 42
Метки нет (Все метки)

Проверить, соблюдается ли в тексте баланс круглых скобок. Для каждой открывающей скобки ‘(‘ должна быть найдена соответствующая закрывающая ‘)’.

Примечание-Обрабатываемый в программе текст должен содержать несколько строк. Но массив строк не формировать, то есть в оперативной памяти хранить одну обрабатываемую строку. Оперативную память резервируем для одной строки. Вводим строку, анализируем её и на её место вводим новую строку.

Помогите люди добрые!!Со строками вообще проблема...не знаю как!!Помогите пожалуйста!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2011, 19:14     Баланс круглых скобок
Посмотрите здесь:

C++ Баланс скобок
C++ Баланс скобок в файле
Баланс скобок C++
C++ Баланс скобок
C++ Проверить баланс скобок
Баланс скобок C++
Баланс скобок C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
18.03.2011, 00:09  [ТС]     Баланс круглых скобок #41
а у меня не работает(
ладно...пойду еще поробую..всем спасибо!!!)

Добавлено через 16 минут
lavan, a вф попробуйте переписать используя только просто char str[size] , gets(str)...
вообще ничего работать не будут..отчего?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.03.2011, 00:33     Баланс круглых скобок #42
Что-то не увидел здесь одного из самых популярных вариантов...
Понимаю, что говорили делать без STL, но реализовать свой стек не является трудной задачей.
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
#include <iostream>
#include <stack>
#include <string>
 
bool laysCheck(const std::string& str)
{
     std::stack<char> lays;
     for(std::string::const_iterator iter=str.begin(); 
          iter != str.end(); ++iter)
     {
          if(*iter == '(')
             lays.push(*iter);
          else if(*iter == ')' && !lays.empty())
             lays.pop();
     }
     return lays.empty();
}
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::cout<<(laysCheck(str) ? "Yes" : "No")<<'\n';
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2011, 07:17     Баланс круглых скобок
Еще ссылки по теме:

C++ Строки. Проверить правильность задания круглых скобок
C++ Перегрузка круглых скобок как ravalue
Проверить правильность расстановки в тексте круглых скобок C++
C++ Проверить баланс круглых скобок, используя очередь
Проверить правильность расположения круглых скобок C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
18.03.2011, 07:17     Баланс круглых скобок #43

Не по теме:

ForEveR, ну так сделал бы чтоб сразу и квадратные, и круглые, и фигурные скобки считались



Добавлено через 3 минуты
Кстати, реализация неправильная - для примера введи ")"

Добавлено через 31 минуту
Как-то так:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <cstdlib>
#include <stack>
 
bool is_balanced(const char*);
bool is_opening_bracket(char);
bool is_closing_bracket(char);
char opening_bracket(char);
 
int main(int argc, char* argv[])
{
    if(argc == 1)
    {
    std::cerr << "No input" << std::endl;
    return EXIT_FAILURE;
    }
 
    for(size_t i = 1; i < argc; ++i)
    std::cout << argv[i] << ": "
          << (is_balanced(argv[i]) ? "balanced" : "unbalanced")
          << std::endl;
 
    return EXIT_SUCCESS;
}
 
bool is_balanced(const char* expr)
{
    std::stack<char> stk;
 
    for( ; *expr; ++expr)
    {
    if(is_opening_bracket(*expr))
        stk.push(*expr);
    else if(is_closing_bracket(*expr))
    {
        if(stk.empty() || stk.top() != opening_bracket(*expr))
        return false;
        else
        stk.pop();
    }
    }
 
    return stk.empty();
}
 
bool is_opening_bracket(char ch)
{
    switch(ch)
    {
    case '(':
    case '{':
    case '[':
    case '<':
    return true;
 
    default:
    return false;
    }
}
 
bool is_closing_bracket(char ch)
{
    switch(ch)
    {
    case ')':
    case '}':
    case ']':
    case '>':
    return true;
 
    default:
    return false;
    }
}
 
char opening_bracket(char ch)
{
    switch(ch)
    {
    case ')':
    return '(';
 
    case '}':
    return '{';
 
    case ']':
    return '[';
 
    case '>':
    return '<';
 
    default:
    return 0;
    }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nameless@nameless-desktop:~/cpp-sample$ ./cpp-sample 
No input
nameless@nameless-desktop:~/cpp-sample$ ./cpp-sample \
> "()[{<k>}(foo)bar]" \
> ")ba" \
> "ab)" \
> "(abc)" \
> "(()((()))(()))" \
> "(this{is{another}balanced[bracket<expression>for]sure})" \
> "[but(this>one<is)not]"
``()[{<k>}(foo)bar]``: balanced
``)ba``: unbalanced
``ab)``: unbalanced
``(abc)``: balanced
``(()((()))(()))``: balanced
``(this{is{another}balanced[bracket<expression>for]sure})``: balanced
``[but(this>one<is)not]``: unbalanced
nameless@nameless-desktop:~/cpp-sample$
Yandex
Объявления
18.03.2011, 07:17     Баланс круглых скобок
Ответ Создать тему
Опции темы

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