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

Очередь - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ вычисление степени http://www.cyberforum.ru/cpp-beginners/thread323224.html
Здрасьте! Помогите плиз!!! Нужно: вычислить a в степени (n) , если (n>0). Люди добрые хелп плиз!!!!!
C++ Лабораторки по програмированию лаба1 Написать программу для расчета стоимости междугородних разговоров. Программа выводит на экран приглашение на ввод дня недели (может вводиться как число или как символ или как символьная... http://www.cyberforum.ru/cpp-beginners/thread323219.html
C++ Посоветуйте компилятор из MS Visual Studio
MS Visual Studio 6.0 C++ или MS Visual Studio 2005? И пожалуйста называйте причины почему вы выбрали именно этот компилятор и не тот?
C++ Написать рекурсивную функцию удалениея пробелов из строки
Написать рекурсивную функцию, удаление пробелов из строки
C++ Стек содержит целые числа, удвоить вхождение нуля в стеке http://www.cyberforum.ru/cpp-beginners/thread323179.html
Стек содержит целые числа, удвоить вхождение нуля в стеке
C++ Вызов функции Написать вызов функции для строковых переменных, помогите! подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.07.2011, 14:24
Вот со стеком (правда, без очередей):
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
#include <iostream>
#include <cstdlib>
#include <stack>
#include <vector>
#include <stdexcept>
#include <utility>
#include <algorithm>
 
void print_brackets(const char*) throw(std::runtime_error);
 
int main(int argc, char* argv[])
{
    if(argc == 1)
    {
    std::cerr << "Usage: " << *argv << " EXPRESSION ..." << std::endl;
    return 1;
    }
 
    for(size_t i = 1; i < argc; ++i)
    {
    try
    {
        std::cout << "Processing expression `" << argv[i] << "'..." << std::endl;
        print_brackets(argv[i]);
    }
    catch(std::exception& e)
    {
        std::cerr << "Error: " << e.what() << std::endl;
    }
    }
    
    return 0;
}
 
void print_brackets(const char* str) throw(std::runtime_error)
{
    std::stack<size_t> opening_brackets;
    std::vector<std::pair<size_t, size_t> > bracket_pairs;
 
    const char* start = str;
    
    while(*str)
    {
    if(*str == '(')
        opening_brackets.push(str - start + 1);
    else if(*str == ')')
    {
        if(opening_brackets.empty())
        throw std::runtime_error("Unbalanced bracket expression");
        bracket_pairs.push_back(std::make_pair(opening_brackets.top(), str - start + 1));
        opening_brackets.pop();
    }
    ++str;
    }
 
    std::sort(bracket_pairs.begin(),
          bracket_pairs.end(),
          [](const std::pair<size_t, size_t>& br1,
         const std::pair<size_t, size_t>& br2)
    {
    return br1.first < br2.first;
    });
        
    if(!opening_brackets.empty())
    throw std::runtime_error("Unbalanced bracket expression");
 
 
    for(std::vector<std::pair<size_t, size_t> >::const_iterator it = bracket_pairs.begin();
    it != bracket_pairs.end();
    ++it)
    std::cout << it->first << " " << it->second
          << (it + 1 == bracket_pairs.end() ? "" : ", ");
              
    std::cout << std::endl;
}
Код
[nameless@laptop cpp-sample]$ ./cpp-sample \
> 'a+(45-f(x)*(b-c))' \
> '(invalid(bracket)expression' \
> 'fact(n) = (n == 0 ? 1 : fact(n - 1) * n)'
Processing expression `a+(45-f(x)*(b-c))'...
3 17, 8 10, 12 16
Processing expression `(invalid(bracket)expression'...
Error: Unbalanced bracket expression
Processing expression `fact(n) = (n == 0 ? 1 : fact(n - 1) * n)'...
5 7, 11 40, 29 35
[nameless@laptop cpp-sample]$
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru