Stringstream математические операции - PullRequest
3 голосов
/ 22 января 2020

Допустим, у меня есть поток строк, который содержит строку 1+2. Теперь, если я получу значение int этого потока строки, я получу 1 в качестве результата. Есть ли способ получить ожидаемый результат 3?

Ответы [ 2 ]

3 голосов
/ 22 января 2020

Не используется стандартная библиотека C ++. Разбор выражений не является частью стандартного C ++. Вам придется написать свой собственный.

2 голосов
/ 22 января 2020

Конечно, вы можете сделать свой собственный тип result, а затем иметь собственный оператор извлечения, который читает из потока строк так, как вы хотите:

struct result {
    double val;
    bool err;
    std::string err_val;
};

std::istringstream& operator>>(std::istringstream &iss, result &r) {
    double lhs, rhs;
    char op;
    //Should probably add some check to make sure this read happens okay...
    iss >> lhs >> op >> rhs; 

    if (op == '+') {
        r.val = lhs + rhs;
        r.err = false;
    } else {
        r.err = true;
        r.err_val = "I can only handle addition!";
    }
    return iss;
}

int main() {
    std::istringstream iss("1+2");
    result res;
    iss >> res;

    std::cout << "Result is: " << res.val << std::endl;

    return 0;
}

Смотрите его здесь: https://ideone.com/LKAlag

...