84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
除了逆波兰式求解 字符串表达式之外,还有其他什么方法来求值?
学习是最好的投资!
不少方法啊 表达式树,两个栈(操作数栈,运算符栈),文法等等
直接贴个以前写过的给你吧。
#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; }
这个我也不懂,帮不了你
不少方法啊 表达式树,两个栈(操作数栈,运算符栈),文法等等
直接贴个以前写过的给你吧。
这个我也不懂,帮不了你