Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
148 / 4 / 0
Регистрация: 19.02.2013
Сообщений: 369
1

Вычислить значение выражения, заданного в виде строки

11.04.2018, 10:29. Показов 2507. Ответов 6
Метки нет (Все метки)

Здравствуйте, есть строка которая в себе содержит данные вот пример str="/254+523-42323/65425*75323*"
мне собственно нужно получить данные, нужно вначале 254+523 получившиеся данные -42323, затем /65425 и затем *75323.
т.е. последовательно, =_= но как это сделать даже приблизительно не знаю, помогите пожалуйста.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2018, 10:29
Ответы с готовыми решениями:

Вычислить значение арифметического выражения, заданного в виде строки
с клавиатуры вводиться строка типа: "(7+1)*23-1" в одну строку, нужно определить значение...

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

Найти значение арифметического выражения, заданного в виде строки
Помогите пожалуйста! Ввести с клавиатуры строку, которая содержит арифметическое выражение вида...

Арифмометр: посчитать значение выражения, заданного в виде строки
Всем доброе время суток! Столкнулся с задачей и не могу сообразить даже в какую сторону шагать!...

6
Модератор
1638 / 1092 / 487
Регистрация: 17.07.2012
Сообщений: 5,344
11.04.2018, 10:34 2
Почти как калькулятор, только проще ибо приоритет операций не учитывается.
Только не понятно зачем в той строке первый и последний символы?
0
148 / 4 / 0
Регистрация: 19.02.2013
Сообщений: 369
11.04.2018, 10:35  [ТС] 3
да да, вот в этом то и трабл, что бывает что вначале есть символ и в конце, а бывает и там и там, их нужно как то обойти что бы не учитывать.
0
Модератор
1638 / 1092 / 487
Регистрация: 17.07.2012
Сообщений: 5,344
11.04.2018, 10:56 4
C++
1
2
3
while (!isdigit(s.back())) s.pop_back(); // выкидываем символы в конце пока последним символом не будет цифра
size_t i = 0;
while (!isdigit(s[i])) ++i;
И дальше тупо идти по строке(начиная с i-ого символа) и считать. Ну и учесть еще что строка может быть какой-то такой "/***/" если может конечно.
0
148 / 4 / 0
Регистрация: 19.02.2013
Сообщений: 369
11.04.2018, 10:59  [ТС] 5
Может, по сути что бы вы поняли, строка генерится из цифр и -+/*
если можно скиньте пожалуйста код для преобразования строки с символами, уже в готовый ответ
0
2228 / 1731 / 865
Регистрация: 21.12.2010
Сообщений: 3,074
Записей в блоге: 11
11.04.2018, 12:02 6
Лучший ответ Сообщение было отмечено DarkJoker1992 как решение

Решение

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
#include <iostream>
#include <string>
#include <regex>
 
 
int main()
{
    std::string str("/254+523-42323/65425*75323*");
    str = std::regex_replace(str, std::regex("^\\D|\\D$"), "");
    double res = std::stoi(str);
    std::regex reg("\\D(\\d+)");
    for (std::sregex_iterator ib(str.begin(), str.end(), reg), ie; ib != ie; ++ib)
    {
        char op = *ib->operator[](0).first;
        std::ssub_match smNum = ib->operator[](1);
        switch (op)
        {
        case '+':
            res += stoi(smNum);
            break;
        case '-':
            res -= stoi(smNum);
            break;
        case '*':
            res *= stoi(smNum);
            break;
        case '/':
            res /= stoi(smNum);
            break;
        }
    }
    std::cout << res << std::endl;
}
2
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
03.05.2018, 18:58 7
DarkJoker1992, вот мой вариант. Программа работает с вещественными числами (помимо целых). Первый символ строки - неотрицательное число, последний символ строки - также число:

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
#include <bits/stdc++.h>
 
    using namespace std;
 
int main() {
    double res;
    char sign;
    string s, str;
    cout << "Enter a string expression:\n";
    getline(cin, str);
    res = atof(str.c_str());
    str += " ";
    for (int i = 0; i < str.size(); i++) {
        s += str[i];
        if (!(isdigit(str[i])) && str[i] != '.') {
            s.pop_back();
            if (sign == '-')
                res -= atof(s.c_str());
            else if (sign == '+')
                res += atof(s.c_str());
            else if (sign == '*')
                res *= atof(s.c_str());
            else if (sign == '/')
                res /= atof(s.c_str());
            sign = str[i];
            s = "";
        }
    }
    cout << "Target info: " << res << endl;
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2018, 18:58

Вывести значение логического выражения, заданного в виде строки S.
Вывести значение логического выражения, заданного в виде строки S. Выражение определяется...

Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» — True, «F» — False): <выражение> :
помогите пожалуйста решить задачку на рекурсию Вывести значение логического выражения, заданного...

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

Вывести значение целочисленного выражения, заданного в виде строки
Выражение определяется следующим образом: &lt;выражение&gt; ::= &lt;терм&gt; | &lt;выражение&gt;+&lt;терм&gt; |...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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