Aşağıdaki sonucu anlamlandırmaya çalışıyorum. test durumu kodu burada motivasyon i numaralama 12345 'tamsayı olarak ve ASLA olarak kayan noktaları eşleştirmek istediğiniz olmasıdırtamsayının ve kayan noktaların sayısal olarak ayrıştırılması
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_fusion.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/variant/recursive_variant.hpp>
#include <boost/spirit/home/support/context.hpp>
#include <boost/spirit/home/phoenix.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>
namespace sp = boost::spirit;
namespace qi = boost::spirit::qi;
using namespace boost::spirit::ascii;
namespace fusion = boost::fusion;
namespace phoenix = boost::phoenix;
using phoenix::at_c;
using phoenix::push_back;
using phoenix::bind;
template <typename P>
void test_parser(
char const* input, P const& p, bool full_match = true)
{
using boost::spirit::qi::parse;
char const* f(input);
char const* l(f + strlen(f));
if (parse(f, l, p) && (!full_match || (f == l)))
std::cout << "ok" << std::endl;
else
std::cout << "fail" << std::endl;
}
int main() {
test_parser("+12345", qi::int_); //Ok
test_parser("+12345", qi::double_ - qi::int_); //failed, as expected
test_parser("+12345.34", qi::int_); // failed, as expected
test_parser("+12345.34", qi::double_ - qi::int_); //failed but it should be Ok!
};
olduğunu. '12345.34', double_ ile eşleşmeyecek ve asla int_ değil ancak karşılıklı durum doğru değil; '12345' her iki tam sayı (int_) ve kayan nokta (double_) ile eşleşir. Double_ - int_ denedim ve '12345' ile eşleşemedi. Ancak umudum, '12345.34' son test vakasının double_ - int_ ile pozitif olarak eşleşmesiydi, fakat elde ettiğim sonuç eşleşmiyor.
bu böyledir ve nasıl ben sadece yüzer noktaları eşleşen bir tek tamsayılar maçları ayrıştırıcı ve başka alırım Neden çift- ile
+1 Bu daha iyi bir çözümdür. – academicRobot
teşekkürler, bu mükemmel çalışıyor – lurscher