Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
1

Лэйс на с++

18.11.2010, 16:07. Показов 3870. Ответов 52
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main () {
    int lays=0;
    char mas[1001];
    cin>>mas;
    for (int i=0; i<=strlen(mas);i++)
        if ('(')
        lays++;
    
    if ('(')
        lays--;
        cout<<"VALID"<<endl;
    
    if (lays==0)
        cout<<"INVALID"<<endl;
    
        return 0;
}
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 17:32 21
Author24 — интернет-сервис помощи студентам
Hardcore, Скобки разные. Но суть одна и та же.

Добавлено через 1 минуту
Возьму за эталон код volovzi

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 (int argc, char * const argv[]) {
        std::string string;
        int counter = 0;
        
        std::cin >> string;
        
        for (int i = 0; i < string.size() && counter >= 0; ++i) {
                if (string[i] == '(' || string[i]=='[' || string[i]=='{') ++counter;
                else if (string[i] == ')' || string[i]==']' || string[i]=='}') --counter;
        }
        
        if (counter == 0) std::cout << "Скобки расставлены верно." << std::endl;
        else std::cout << "Скобки расставлены неверно." << std::endl;
 
        return 0;
}
Ошибся. Не покатит это.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
18.11.2010, 17:34 22
Цитата Сообщение от Hardcore Посмотреть сообщение
{[()([]{})[]]({}{{}})}[] Yes
вот так вот?
у мнея вообще нет мыслей как это можно написать?
Через стек.
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 17:50 23
Тут можно устроить счетчик для каждой скобки. Но мне кажется это будет слишком. Посему лучше воспользоваться советом rangerx
1
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 17:51  [ТС] 24
можете привести пример стэкам?
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 18:31 25
Hardcore, идея в том, чтобы запоминать, какая скобка открылась последней, и запрещать закрывать "не свою" скобку (например, фигурную закрывать круглой).
Выглядеть это будет примерно так:
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
#include <iostream>
#include <string>
#include <stack>
 
bool is_opening_bracket (char symbol) { return symbol == '(' || symbol == '[' || symbol == '{'; }
bool is_closing_bracket (char symbol) { return symbol == ')' || symbol == ']' || symbol == '}'; }
 
bool brackets_are_relative (char opening_bracket, char closing_bracket) {
    return (
        opening_bracket == '(' && closing_bracket == ')' ||
        opening_bracket == '[' && closing_bracket == ']' ||
        opening_bracket == '{' && closing_bracket == '}'
    );
}
 
int main (int argc, char * const argv[]) {
    std::string string;
    std::stack<char> opening_brackets;
    bool ok = true;
    
    std::cin >> string;
    
    for (int i = 0; i < string.size() && ok; ++i) {
        if (is_opening_bracket(string[i])) {
            opening_brackets.push(string[i]);
        } else if (is_closing_bracket(string[i])) {
            if (!opening_brackets.empty() && brackets_are_relative(opening_brackets.top(), string[i])) opening_brackets.pop();
            else ok = false;
        }
    }
    
    if (opening_brackets.empty() && ok) std::cout << "Скобки расставлены верно." << std::endl;
    else std::cout << "Скобки расставлены неверно." << std::endl;
 
    return 0;
}
1
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 19:01  [ТС] 26
ясно. такой момент.
мне надо сначало написать количество символов которые я должен ввести.
это в мэйне написать или в функций?

Добавлено через 16 минут
C++
1
2
3
4
int n;
        std::cin>>n;
        for (int i=0; i<n; i++)
        std::cin >> string[i];
я по пробывал написать так.
чтоб ввести это 6 ([())]
но выходит ошибка после компиляций.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 19:12 27
Hardcore, М. Обязательно вводить сколько символов?)
Просто string - динамически распределяет под себя память под кол-во символов которые введены.
0
59 / 58 / 16
Регистрация: 18.11.2010
Сообщений: 315
18.11.2010, 19:18 28
я здесь уже создал тему на счет этой задачи!!! Смотри Стек.Исправить ошибки(с++)

Добавлено через 3 минуты
а если переделать вот этот код???

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
#include <iostream>
#include<stack>
#include<queue>
#include<deque>
#include <string>
 
using namespace std;
 
int main()
{
    string mas;
    stack <string> st;
 
    int count=0;
    int n;
    
    cin >> n;
    cin >> mas;
 
    for (int i=0; i<n; i++)
    {
        if (mas[i]=='(' || mas[i]=='[' || mas[i]=='{')
        {
            st.push(mas[i]);
        }
        if (mas[i]==')')
        {
            if (st.top=='(')
            {
                st.pop();
            }
            if (st.top=='[')
            {
                st.pop();
            }
            if (st.top=='{')
            {
                st.pop();
            }
            else
            {
                count ++;
            }
        }
    }
    if (count==0)
    {
        cout << "yes";
    }
    else
    {
        cout << "no";
    }
    return 0;
}
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
18.11.2010, 19:20 29
C++
1
2
3
4
int n;
                std::cin>>n;
                for (int i=0; i<n; i++)
        std::cin >> string[i];
я по пробывал написать так.
чтоб ввести это 6 ([())]
но выходит ошибка после компиляций.
Hardcore, если вам так необходимо использовать string, то нужно использовать push_back() . Индексировать можно заполненые строки.
1
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 19:23  [ТС] 30
Kastaneda, это условие задачи.
если можешь напиши код.
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
#include <iostream>
#include <string>
#include <stack>
 
bool is_opening_bracket (char symbol) { return symbol == '(' || symbol == '[' || symbol == '{'; }
bool is_closing_bracket (char symbol) { return symbol == ')' || symbol == ']' || symbol == '}'; }
 
bool brackets_are_relative (char opening_bracket, char closing_bracket) {
        return (
                opening_bracket == '(' && closing_bracket == ')' ||
                opening_bracket == '[' && closing_bracket == ']' ||
                opening_bracket == '{' && closing_bracket == '}'
        );
}
 
int main (int argc, char * const argv[]) {
        std::string string;
        std::stack<char> opening_brackets;
        bool ok = true;
        
        std::cin >> string;
        
        for (int i = 0; i < string.size() && ok; ++i) {
                if (is_opening_bracket(string[i])) {
                        opening_brackets.push(string[i]);
                } else if (is_closing_bracket(string[i])) {
                        if (!opening_brackets.empty() && brackets_are_relative(opening_brackets.top(), string[i])) opening_brackets.pop();
                        else ok = false;
                }
        }
        
        if (opening_brackets.empty() && ok) std::cout << "Скобки расставлены верно." << std::endl;
        else std::cout << "Скобки расставлены неверно." << std::endl;
 
        return 0;
}
подкоректирву этот.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 19:35 31
Цитата Сообщение от Hardcore Посмотреть сообщение
мне надо сначало написать количество символов которые я должен ввести.
Зачем?
1
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 20:01  [ТС] 32
Это условие задачи.
Если можете помогите
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
18.11.2010, 20:07 33
Напишите условия задания полностью, а то по обрывакам фраз полная картина не понятна. Я недавно парсер для калькулятора писал, там у меня есть обработка скобок, может подойдет. (причем сначала написал через string потом подумал и сделал по другому, но строковая версия на компе осталась )
0
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 20:29  [ТС] 34
входные данные
6
([())] No

24
{[()([]{})[]]({}{{}})}[] Yes
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 20:44 35
Hardcore, я думаю, что ты что-то неправильно понял. Ввод длины строки с последующим посимвольным считыванием в данном случае — лишняя работа. А лишнюю работу делать не нужно.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 20:47 36
volovzi, Для использования char* понадобится.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
18.11.2010, 20:49 37
Цитата Сообщение от Kastaneda Посмотреть сообщение
Напишите условия задания полностью
Цитата Сообщение от Hardcore Посмотреть сообщение
входные данные
6
([())] No

24
{[()([]{})[]]({}{{}})}[] Yes
Это тест на интуицию? Нужно определить грамотно ли стоят скобки? А выше вы что-то про string писали? Потом выяснится, что нужно на С писать, а не на С++ )
0
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 20:51  [ТС] 38
вот условия
Input
The first line contains the number of brackets - N (1 ≤ N ≤ 100 000).
The second contains the sequence of N symbols from the set (,) [,] {,}.
Output
Displays the word "Yes", if you can get a correct arithmetic expression, or "No", if you can not.
перевод.
ввод
первая линия содержить количество скобок.
второая линия содержит скобки.
вывод
надо вывести да если условия соблюдены, если нет то вывести нет.
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 20:59 39
Hardcore, да, задание дурацкое. В таком случае нужно не делать тупо и в лоб, а объяснить преподавателю, что можно сделать лучше.

P.S. А почему задание на "нерусском"?
0
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
18.11.2010, 21:04  [ТС] 40
у нас типа международный универ. и все предметы идут на англ. вот так вот. а в лоб нельзя, я понимаю что так легче. просто он в контесторе ставит тесты (условия).

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
Это тест на интуицию? Нужно определить грамотно ли стоят скобки? А выше вы что-то про string писали? Потом выяснится, что нужно на С писать, а не на С++ )
всё надо писать на с++
0
18.11.2010, 21:04
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru