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

Задачка на стек - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Строки и работа над ними http://www.cyberforum.ru/cpp-beginners/thread419448.html
Есть следующее условие задачи: Ввести из файла текст, слова в тексте разделены пробелом , если слово состоит из чётного количества символов, то удалить в нём всё цифры. результат вывести на экран. пример: Было: мама м3ла12 стало: мама мла Подскажите как решить данную задачу? И что можно почитать что бы разобраться? Если у кого есть время решить, то выкиньте код, просто по примеру легче...
C++ Работа с файлами.Требуется корекктировка Код работает находит самое длинное слово , его длину , но не корректно вычисляет кол-во заданных слов входящих в текст Пожалуйста решите проблему #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <string.h> #include <conio.h> #include <locale.h> http://www.cyberforum.ru/cpp-beginners/thread419444.html
C++ Проверка симметричности булевых функций
Задача:Проверка симметричности Булевых функции, подкиньте идею мне этого хватит, заранее спасибо)
C++ Ввести строку символов, которая есть фрагментом программы и записать в файл
Искал по форуму - не нашел. Задача: Ввести строку символов, которая есть фрагментом программы, написанной на языке С++ и записать все это в файл. Подсчитать, сколько раз среди символов появляются "(" и ")". Сохранить результат в файл. zabadzzzz, Правила2.3. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.Изначальное название...
C++ 1е-005 -> 0.00001 http://www.cyberforum.ru/cpp-beginners/thread419426.html
Здравствуйте. Как в выводе дробного числа заменить "1е-005" на "0.00001", скажем? Спасибо.
C++ заполнить секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей помогите, пожалуйста, написать программу на С или С++ Нужно заполнить секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей, ЛП, от левого верхнего угла вниз - вправо. Остаток матрицы заполнить нулями. подробнее

Показать сообщение отдельно
tdu
1 / 1 / 0
Регистрация: 03.12.2010
Сообщений: 23
30.12.2011, 02:00  [ТС]     Задачка на стек
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 <fstream>
#include <cstdlib>
#include <string>
#include "st_interface.h"
 
using namespace std;
using namespace st_modul;
 
enum Brackets {
  LEFT_BRACKET = '(',
  RIGHT_BRACKET = ')'
};
 
struct Bracket {
  Bracket(Brackets bracket_, size_t position_)
    : bracket(bracket_), position(position_) {}
  Brackets bracket;
  size_t position;
};
 
int main(int argc, char *argv[]) {
  std::string expression = "A+(45-F(X)*(B-C))";
  st_modul::Stack stack;
  for (size_t i = 0; i < expression.size(); ++i)
    if (expression[i] == LEFT_BRACKET) {
      stack.push(Bracket(LEFT_BRACKET, i));
    } else
    if (expression[i] == RIGHT_BRACKET) {
      Bracket bracket(RIGHT_BRACKET, i);
      if (stack.isNull()) {
        std::cout << "Error in expression." << std::endl;
        break;
      } else if (stack.top().bracket == LEFT_BRACKET) {
        std::cout << "[" << stack.top().position << ":" << i << "] ";
        stack.pop();
      }
    }
  if (!stack.isNull())
    std::cout << "Error in expression." << std::endl;
  stack.destroy();
 
}

Не прокатывает, выскакивают ошибки:

1>------ Построение начато: проект: 3, Конфигурация: Debug Win32 ------
1> st_main.cpp
1>.....\st_main.cpp(27): error C2664: st_modul::Stack:ush: невозможно преобразовать параметр 1 из "Bracket" в "const st_modul::base &"
1> Причина: невозможно преобразовать "Bracket" в "const st_modul::base"
1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
1>...\st_main.cpp(34): error C2228: выражение слева от ".bracket" должно представлять класс, структуру или объединение
1> тип: st_modul::base
1>...\st_main.cpp(35): error C2228: выражение слева от ".position" должно представлять класс, структуру или объединение
1> тип: st_modul::base
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 2 часа 47 минут
Я всё таки смог родить по своим мыслям, правда результат немножко некорректный.
Что у меня получается:

При выражении которое из первого сообщения A+(45-F(X)*(B-C))
программа выводит результат так : 8 10; 12 16; 3 17;
т.е., программа выводит номера скобок в порядке возврастания позиций ЗАКРЫВАЮЩИХ скобок,
а мне нужно чтобы выводила в порядке возврастания позиций ОТКРЫВАЮЩИХ скобок, т.е вот так :
3 17; 8 10; 12 16

Вот тут у меня начинается ступор, я не вижу простого решения, у меня складывается ощущение что всё надо совсем подругому реализовывать...

Вот что у меня получилось : ( смотреть , в принципе, стоит только первый кусок , т.к в нём алгоритм который видимо и работает немного не так как хотелось бы)

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
// ---st_main.cpp---
#include <iostream>
#include <fstream>
#include <string>
#include "st_interface.h"
 
using namespace std;
using namespace st_modul;
 
void solution(string str);      // прототипы
 
 
int main () 
{
    ifstream fin ("inputfile.txt");     
    string str;
    getline(fin, str);              // считываем выражение из inputfile.txt в строку str 
    cout << "exspression: "<< str << endl;
    fin.close();                // закрываем inputfile  
    solution (str);         //  вызываем void solution(string str);
    system("pause");
    return 0;
}
 
void solution (string str)
{
    Stack s1, s2;
    int i = 0;
    while ( i < str.size() ) 
    {
        if ( str[i] == '(' )
        { 
            s1.push(i+1);
        }
        if ( str[i] == ')' ) 
        {
            cout << s1.top() <<" "<< i+1 << "; ";
            s1.pop();
        }
        i++;
    }   
}
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
// st_interface.h
namespace st_modul
{
 
//-------------------------------------
    typedef int base;
    
    class Stack {
    struct node; 
 
    node *topOfStack;
 
    public:
        Stack ()
            { topOfStack = NULL;
            };
        base top (void);
        void pop (void);
        void push (const base &x);
        bool isNull(void);
        void destroy (void);
    };
 
 
}
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
// st_implementation.cpp
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include "st_interface.h"
using namespace std ;
 
namespace st_modul
{
    struct Stack::node {
    base *hd;
    node *tl;
        // constructor
        node ()
            {hd = NULL; tl = NULL; 
        }
    };// end node
 
//-------------------------------------
    base Stack::top (void) 
    {// PreCondition: not null  
        if (topOfStack == NULL) { cerr << "Error: top(null) \n"; exit(1); }
        else return *topOfStack->hd;
    }
//-------------------------------------
    void Stack::pop (void)
    {// PreCondition: not null
        if (topOfStack == NULL) { cerr << "Error: pop(null) \n"; exit(1); }
        else 
        {   node *oldTop = topOfStack;
            topOfStack = topOfStack->tl;
            delete oldTop->hd;
            delete oldTop;
        }
    }
//-------------------------------------
    void Stack::push (const base &x)
    {   node *p;
        p = topOfStack;
        topOfStack = new node; 
        if ( topOfStack != NULL)    {   
            topOfStack->hd = new base;
            *topOfStack->hd = x;
            topOfStack->tl = p;
        }
        else {cerr << "Memory not enough\n"; exit(1);}
    }
//-------------------------------------
    bool Stack::isNull(void)
    {   return (topOfStack == NULL) ;
    }
//-------------------------------------
    void Stack::destroy (void)
    {   while ( topOfStack != NULL) {
            pop();  
        }
    }
} // end of namespace h_list
 
Текущее время: 07:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru