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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Giggs131
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 19
#1

Стандартная библиотека шаблонов (STL) - C++

16.09.2010, 19:32. Просмотров 2157. Ответов 7
Метки нет (Все метки)

Пожалуйста,помогите решить..


Написать программу, которая использует класс string для анализа строки, содержащей математическое выражение, например, вида - (2+3)*4+1. Строка вводится с клавиатуры. Программа выдает результат вычисления выражения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2010, 19:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стандартная библиотека шаблонов (STL) (C++):

Стандартная библиотека шаблонов STL Алгоритмы - C++
Здравствуйте помогите пожалуйста сделать сортировку по фамилии // ConsoleApplication59.cpp: определяет точку входа для консольного...

Стандартная библиотека шаблонов STL LIST - C++
Добрый день. Подскажите пожалуйста как сделать поиск элемента в контейнерном классе list. Мне нужно сделать поиск по фамилии....

Stl стандартная библиотека шаблонов c++ map - C++
Доброго всем времени суток :) Помогите пожалуйста дописать прогу. Нужно добавить сортировку по фамилии (что бы выводились в алфавитном...

Бинарное дерево, стандартная библиотека шаблонов (STL) - C++
Моя задача заключается в следующем: Построить шаблон класса "бинарное дерево" со следующими возможностями: 1) возможность добавления и...

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком - C++
здравствуйте. помогите разобраться с данной задачей. Даны натуральное число n, символы S1,S2,...,Sn. будем рассматривать слова,...

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком - C++
Здравствуйте. Решите пожалуйста задачу: Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rubic
8 / 8 / 1
Регистрация: 29.09.2009
Сообщений: 28
16.09.2010, 20:01 #2
Используй обратную польскую запись и пиши
Giggs131
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 19
16.09.2010, 20:15  [ТС] #3
Цитата Сообщение от rubic Посмотреть сообщение
Используй обратную польскую запись и пиши

Мне это ничего не сказало...
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.09.2010, 20:18 #4
Giggs131,
Вам не кажется, что вам указали путь к решению? Алгоритм обратной польской записи с подробным разбором шагов не так тривиален, чтобы расписывать его здесь, однако, зная эти три слова, первая же ссылка в гугле приведёт вас к решению.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.09.2010, 20:19 #5
http://ru.wikipedia.org/wiki/%D0%9F%...86%D0%B8%D1%8F
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.09.2010, 20:21 #6
niXman,
Если уж на то пошло, то здесь указан подробный алгоритм перевода выражения из инфиксной в префиксную нотацию и вычисления полученного выражения
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.09.2010, 20:24 #7
silent_1991, я хз. только глаза раззул
Demon-red
139 / 139 / 19
Регистрация: 25.01.2010
Сообщений: 181
16.09.2010, 21:34 #8
Пример был взят из книги
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <cstring>
using namespace std;
const int LEN = 80;
const int MAX = 40;
char buf[256];
char* rus(const char* text)
{
 CharToOem(text,buf);
 return buf;
}
 
class Stack
{
 private :
   char st [MAX];
   int top;
 public :
   Stack ()
     {top = 0; }
  void push (char var)
   {st[++top] = var; }
  char pop ()
   {return st[top--]; }
  int gettop ()
   {return top;}
};
 
class express
{
  private :
    Stack s;
    char* pStr;
    int Len;
  public :
    express (char* ptr)
     {
      pStr = ptr;
      Len = strlen( pStr );
     }
    void parse ();
    int solve ();
};
 
 
void express :: parse ()
{
 char ch;
 char lastval;
 char lastop;
 
 for (int j = 0; j < Len; j++)
 {
  ch = pStr[j];
  if (ch >= '0' && ch <= '9')
    s.push(ch - '0');
   else
    if (ch == '+' || ch == '-' || ch == '*' || ch == '/')
    {
     if (s.gettop() == 1)
     s.push(ch);
    else
    {
      lastval = s.pop();
      lastop = s.pop();
      if ( ( ch == '*' || ch == '/') && (lastop == '+'  || lastop == '-' ) )
       {
         s.push(lastop);
         s.push(lastval);
       }
      else
       {
       switch (lastop)
       {
         case '+' : s.push(s.pop() + lastval); break;
         case '-' : s.push(s.pop() - lastval); break;
         case '*' : s.push(s.pop() * lastval); break;
         case '/' : s.push(s.pop() / lastval); break;
       }
    }
   s.push(ch);
   }
  }
  else
  {
   exit(1);
  }
 }
 }
 
int express::solve( )
{
 char lastval;
 
 while (s.gettop () > 1)
  {
   lastval = s.pop();
   switch (s.pop())
    {
      case '+' : s.push(s.pop() + lastval); break;
      case '-' : s.push(s.pop() - lastval); break;
      case '*' : s.push(s.pop() * lastval); break;
      case '/' : s.push(s.pop() / lastval); break;
      default : exit(1);
    }
  }
  return int (s.pop());
}
 
int main()
{
  char ans;
  char string [ LEN ];
  cout << rus("\nВведите аримметическое выражение в виде 2+3*7/2"
               "\nЧисла должны из одной цифры"
               "\nНе используя пробелы и скрбки");
 do
 {
   cout << rus("\nВыражение : ");
   cin >> string;
   express* eptr = new express (string);
   eptr->parse();
   cout << rus("\nРезультат : ") << eptr->solve();
   delete eptr;
   cout << rus("\nЕще одно выражение (d/n)? ");
   cin >> ans;
 } while (ans == 'd');
 getch();
        return 0;
}
//---------------------------------------------------------------------------
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 21:34
Привет! Вот еще темы с ответами:

Стандартная библиотека шаблонов - C++
Реализовать класс ввода и вывода с помощью STL

Стандартная библиотека C++ и STL - C++
Вот нашел такие строки в книге Эккеля &quot;Философия С++&quot; В частности например класс vector автор относит к библиотеки С++, причем...

Библиотека шаблонов STL - C++
Здравствуйте, как можно сформировать массив множеств ptr, который формируется из строки str = &quot;the best way of doing something well&quot;, а ptr...

Библиотека стандартных шаблонов STL - C++
1. Создайте пустой целочисленный вектор и поместите в него 10 случайных чисел с интервалом значений от -15 до 15. 2. Напишите две...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2010, 21:34
Ответ Создать тему
Опции темы

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