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