84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
除了逆波兰式求解 字符串表达式之外,还有其他什么方法来求值?
学习是最好的投资!
不少方法啊 表达式树,两个栈(操作数栈,运算符栈),文法等等
直接贴个以前写过的给你吧。
#include <iostream> #include <boost/algorithm/string/trim.hpp> #include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/phoenix_operator.hpp> typedef double value_t; template <typename Iterator> struct calc_parser : boost::spirit::qi::grammar<Iterator, value_t(), boost::spirit::ascii::space_type> { calc_parser() : calc_parser::base_type(expression) { using boost::spirit::qi::double_; using boost::spirit::qi::_val; using boost::spirit::qi::_1; expression = term [_val=_1] >> *( ('+' >> term [_val=_val+_1]) | ('-' >> term [_val=_val-_1]) ) ; term = factor [_val=_1] >> *( ('*' >> factor [_val=_val*_1]) | ('/' >> factor [_val=_val/_1]) ) ; factor = double_ [_val=_1] | '(' >> expression [_val=_1] >> ')' | ('+' >> factor [_val=_1]) | ('-' >> factor [_val=-_1]) ; } boost::spirit::qi::rule<Iterator, value_t(), boost::spirit::ascii::space_type> expression; boost::spirit::qi::rule<Iterator, value_t(), boost::spirit::ascii::space_type> term; boost::spirit::qi::rule<Iterator, value_t(), boost::spirit::ascii::space_type> factor; }; int main() { using boost::spirit::ascii::space; typedef std::string::const_iterator iterator_type; calc_parser<iterator_type> calc; std::string line; while (std::getline(std::cin, line)) { boost::trim(line); if(line=="quit") break; iterator_type first=line.cbegin(); iterator_type last=line.cend(); value_t v; bool r=phrase_parse(first, last, calc, space, v); if (r && first==last) { std::cout << v << std::endl; } else { std::cout << "Parse error" << std::endl; } } return 0; }
这个我也不懂,帮不了你
不少方法啊 表达式树,两个栈(操作数栈,运算符栈),文法等等
直接贴个以前写过的给你吧。
这个我也不懂,帮不了你