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

на основе стеков..... на С++ - C++

Восстановить пароль Регистрация
 
Vitusja
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 32
23.10.2011, 21:37     на основе стеков..... на С++ #1
Всем привет!!!
Нужна ваша помощь....


Проверить в выражении баланс скобок «(« и «)«.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2011, 21:37     на основе стеков..... на С++
Посмотрите здесь:

C++ Анализ применеия стеков
C++ из 2-х стеков в один
Разработайте класс стеков C++
C++ Создание нескольких стеков
Конкатенация (присоединение) стеков C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
23.10.2011, 22:05     на основе стеков..... на С++ #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main()
{
    std::string s;
    getline(std::cin, s);
    int balance = 0;
    for(size_t i = 0; i < s.size(); i++)
        if(s[i] == '(')
            balance--;
        else if(s[i] == ')')
            balance++;
    if(balance)
        std::cout << "Unbalanced brackets!" << std::endl;
    else
        std::cout << "Normal expression" << std::endl;
    return 0;
}
не на основе стека

Добавлено через 9 минут
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>
 
int main()
{
    std::stack<char> st;
    char ch;
    while((ch = std::cin.get()) != -1)
        st.push(ch);
    int bal = 0;
    while(!st.empty())
    {
        if(st.top() == '(')
            bal--;
        else if(st.top() == ')')
            bal++;
        st.pop();
    }
    if(bal)
        std::cout << "Unbalanced";
    else
        std::cout << "Normal";
    std::cout << std::endl;
    return 0;
}
признак конца ввода Girl+Z

Не по теме:

стек здесь просто для того, что так сказано в условии. Это НЕВЕРНОЕ использование стека


Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
23.10.2011, 22:14     на основе стеков..... на С++ #3
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::cout<<(std::count(str.begin(),str.end(),'(')==std::count(str.begin(),str.end(),')') ? "Good\n" : "Bad\n");
    system("pause");
    return 0;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
23.10.2011, 22:22     на основе стеков..... на С++ #4
ну это не совсем так
иначе (()))( тоже пройдет
из примера Mayonez
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 <string>
 
int main()
{
        std::string s;
        getline(std::cin, s);
        int balance = 0;
        for(size_t i = 0; i < s.size(); i++)
                if(s[i] == '(')
                        balance--;
                else if(s[i] == ')')
                {
                    balance++;
                    if (balance > 0)
                    {
                       break;
                    }
                }
        if(balance)
                std::cout << "Unbalanced brackets!" << std::endl;
        else
                std::cout << "Normal expression" << std::endl;
        return 0;
}
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
23.10.2011, 22:25     на основе стеков..... на С++ #5
alex_x_x, я немного не верно прочитал условие. Подумал что нужно просто проверить количество скобок.
Vitusja
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 32
23.10.2011, 23:42  [ТС]     на основе стеков..... на С++ #6
Всем огромное спасибо)))
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
24.10.2011, 00:07     на основе стеков..... на С++ #7
alex_x_x, переделал, должно работать:
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
#include <iostream>
#include <string>
#include <stack>
 
using namespace std;
 
int main()
{
    string s;
    getline(cin, s);
    stack<char> st;
    bool f = 1;
    for(size_t i = 0; i < s.size(); i++)
    {
        if(s[i] == '(')
            st.push(s[i]);
        else if(s[i] == ')')
        {
            if(st.empty() || st.top() != '(')
            {
                f = 0;
                break;
            }
            else
                st.pop();
        }
    }
    if(f && st.empty())
        cout << "good";
    else
        cout << "bad";
    cout << endl;
    return 0;
}
Vitusja
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 32
24.10.2011, 00:18  [ТС]     на основе стеков..... на С++ #8
еще один вопросик.... но не по теме..

[Linker Fatal Error] Fatal: Expected a file name
Что делать???

в Project->Options ->Directories/Conditionals все указано правильно.... что только не пробовала.... одно и тоже - не компилирует((
Windows переустанавливать что ли???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2011, 07:00     на основе стеков..... на С++
Еще ссылки по теме:

C++ Передача стеков
C++ Сравнение элементов стеков
Реализация k-стеков C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.10.2011, 07:00     на основе стеков..... на С++ #9
Цитата Сообщение от Mayonez Посмотреть сообщение
стек здесь просто для того, что так сказано в условии. Это НЕВЕРНОЕ использование стека
По-моему как раз само то) Я бы так сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<stack>
 
int main(){
    std::stack<char> brackets;
    std::string str;
    std::getline(std::cin, str);
    for(int i=0; i<str.length(); i++){
        if(str[i] == '(')
            brackets.push(str[i]);
        else if(!brackets.empty())
            brackets.pop();
        else {
            std::cout<<"Unbalance in "<<i+1<<" brackets"<<std::endl;
            return 0;
        }
    }
    std::cout<<(brackets.empty() ? "Balance OK!" : "Balance not OK, unnecessary left brackets")<<std::endl;
    return 0;
}
без проверки на "левые" символы.
Yandex
Объявления
24.10.2011, 07:00     на основе стеков..... на С++
Ответ Создать тему
Опции темы

Текущее время: 16:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru