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

Вычислить выражение записанное в стрке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 23
16.12.2011, 13:33     Вычислить выражение записанное в стрке #1
Здравствуйте. Подскажите как выполнить следующее: данна строка. необходимо вычислить выражение которое в ней записано и вывести. например: 4+3/2=5.5
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2011, 13:33     Вычислить выражение записанное в стрке
Посмотрите здесь:

вычислить выражение C++
присвоить стрке двумерного масива значение C++
C++ Вычислить выражение
Вычислить выражение C++
Вычислить выражение n++*m C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.12.2011, 14:26     Вычислить выражение записанное в стрке #2
http://ru.wikipedia.org/wiki/Обратная_польская_запись
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 23
17.12.2011, 04:41  [ТС]     Вычислить выражение записанное в стрке #3
А как привести строку "4+3/2" к виду "4 3 2 / +" не подскажите?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.12.2011, 05:13     Вычислить выражение записанное в стрке #4
алгоритм + обратная польская нотация

Добавлено через 2 минуты
вот еще. это я помню из учебника Тененбаума
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 23
17.12.2011, 14:51  [ТС]     Вычислить выражение записанное в стрке #5
Спасибо. Алгоритм кажется понял. Осталось записать его на языке.
C++
1
2
3
4
[B]string[/B] Trans ( string st)
{
 
}
Скажите может быть такая функция? или она может быть только char?
Как посимвольно осуществить перебор строки?
Простите за такие вопросы пустяковые, просто с С до этого не имел дела))
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 15:00     Вычислить выражение записанное в стрке #6
Цитата Сообщение от Миша Колесников Посмотреть сообщение
Простите за такие вопросы пустяковые, просто с С до этого не имел дела))
значит нужно открыть учебник и почитать, или вы нам предлагаете отвечать вам перефразироваными "цитатами" учебника?
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 23
17.12.2011, 15:22  [ТС]     Вычислить выражение записанное в стрке #7
Ну чтобы узнать ответы на 2 этих элементарных вопроса нужно полкниги прочитать, а кода 2 строчки.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
17.12.2011, 15:25     Вычислить выражение записанное в стрке #8
Цитата Сообщение от Миша Колесников Посмотреть сообщение
Спасибо. Алгоритм кажется понял. Осталось записать его на языке.
C++
1
2
3
4
[B]string[/B] Trans ( string st)
{
 
}
Скажите может быть такая функция? или она может быть только char?
Как посимвольно осуществить перебор строки?
Простите за такие вопросы пустяковые, просто с С до этого не имел дела))
Да, такая функция вполне может быть.
Чтобы получить доступ к любому символу строки std::string, достаточно обратиться к нему, как к элементу массива. Т.е. если std::string stroka = "Hello", то stroka[0] будет равно 'H'
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.12.2011, 18:08     Вычислить выражение записанное в стрке #9
Миша Колесников, вы статью по моей ссылке открывали? Внимательно читали? По всем ссылочкам ходили? По этой, например?
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 23
17.12.2011, 18:29  [ТС]     Вычислить выражение записанное в стрке #10
silent_1991, да прочитал еще и гуглил. за ссылку премного Вам благодарен. но насколько мне хватило понимания кода там приведена функция вычисления уже постфиксной записи. То есть мне сначала нужно свое выражение записать в эту запись.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.12.2011, 18:33     Вычислить выражение записанное в стрке #11
Миша Колесников, там есть код перевода из инфиксной в постфиксную нотацию и на других языках, в частности, на C#, в котором совершенно не сложно разобраться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2011, 10:02     Вычислить выражение записанное в стрке
Еще ссылки по теме:

Вычислить выражение C++
Вычислить выражение C++
C++ Вычислить выражение

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

Или воспользуйтесь поиском по форуму:
Миша Колесников
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 23
18.12.2011, 10:02  [ТС]     Вычислить выражение записанное в стрке #12
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
#include <stdio.h>
#include <string.h>
#include <windows.h>
 
int main(void)
{
        float stack[70];
        float res;
        int m = 0;
        char query[100];
 
        printf("Введите выражение: ");
        gets(query);
 
        for (int i = 0; i < strlen(query); i++)
        {
                if (query[i] >= '0' && query[i] <= '9')
                {
                        stack[m] = query[i] - '0';
                        m++;
                        continue;
                }
 
                switch (query[i])
                {
                        case '+':
                        {
                                res = stack[m - 2] + stack[m - 1];
                                break;
                        } 
                        case '-':
                        {
                                res = stack[m - 2] - stack[m - 1];
                                break;
                        }
                        case '*':
                        {
                                res = stack[m - 2] * stack[m - 1];
                                break;
                        }
                        case '/':
                        {
                                res = stack[m - 2] / stack[m - 1];
                                break;
                        }
                }
 
                stack[m - 2] = res;
                m--;
        }
 
        printf("Ответ: %f", res);
        system("pause");
 
        return 0;
}
Вы про этот код?
А все понял... там просто с использованием ООП код. Хочу попробовать без него сделать

Добавлено через 15 часов 17 минут
Составил следующий код перевода из инфиксной в постфиксную, но он почему то не делает то, что нужно. в чем ошибка?
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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
    int j=0, k=0, prior[70];
    char stack[70];
    char st[255], outst[255];
            
    printf("Введите выражение: ");
    gets(st);
    for (int i = 0; i < strlen(st); i++)
    {
        if (st[i] >= '0' && st[i] <= '9')
        {
            outst[j] = st[i] - '0';
            j++;
            continue;
        }
        k++;
        switch (st[i])
        {
            case '+':
            {
                prior[k]=0;
                break;
            } 
            case '-':
            {
                prior[k]=0;
                break;
            } 
            case '/':
            {
                prior[k]=1;
                break;
            } 
            case '*':
            {
                prior[k]=1;
                break;
            } 
  
        }
        if (prior[k]>=prior[k-1])
        {
            stack[k]=st[i];
        }
        else 
        {
            for (int m=sizeof(stack); m<0; m--)
            {
                outst[j] = stack[m];
                stack[m]=0;
                j++;
            }
            stack[0]=st[i];
        }
    }
    printf("Ответ: %f", outst);
    system("pause");
 
    return 0;
}
Yandex
Объявления
18.12.2011, 10:02     Вычислить выражение записанное в стрке
Ответ Создать тему
Опции темы

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