⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 money_get_members_char.cc

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 CC
📖 第 1 页 / 共 2 页
字号:
  const ios_base::iostate eofbit = ios_base::eofbit;  ios_base::iostate err = goodbit;  const locale loc_c = locale::classic();  const string str = "0.01Eleanor Roosevelt";  istringstream iss;   iss.imbue(locale(loc_c, new mon_get_type));  // Iterator advanced, state, output.  const mon_get_type& mg = use_facet<mon_get_type>(iss.getloc());  // 01 string  string res1;  iter_type end1 = mg.get(str.begin(), str.end(), false, iss, err, res1);  string rem1(end1, str.end());  VERIFY( err == goodbit );  VERIFY( res1 == "1" );  VERIFY( rem1 == "Eleanor Roosevelt" );  // 02 long double  iss.clear();  err = goodbit;  long double res2;  iter_type end2 = mg.get(str.begin(), str.end(), false, iss, err, res2);  string rem2(end2, str.end());  VERIFY( err == goodbit );  VERIFY( res2 == 1 );  VERIFY( rem2 == "Eleanor Roosevelt" );}// libstdc++/5280void test04(){#ifdef _GLIBCPP_HAVE_SETENV   // Set the global locale to non-"C".  std::locale loc_de("de_DE@euro");  std::locale::global(loc_de);  // Set LANG environment variable to de_DE@euro.  const char* oldLANG = getenv("LANG");  if (!setenv("LANG", "de_DE@euro", 1))    {      test01();      test02();      test03();      setenv("LANG", oldLANG ? oldLANG : "", 1);    }#endif}struct My_money_io : public std::moneypunct<char,false>{  char_type do_decimal_point() const { return '.'; }  std::string do_grouping() const { return "\004"; }    std::string do_curr_symbol() const { return "$"; }  std::string do_positive_sign() const { return ""; }  std::string do_negative_sign() const { return "-"; }    int do_frac_digits() const { return 2; }  pattern do_pos_format() const  {    pattern pat = { { symbol, none, sign, value } };    return pat;  }  pattern do_neg_format() const  {    pattern pat = { { symbol, none, sign, value } };    return pat;  }};// libstdc++/5579void test05(){  using namespace std;  typedef istreambuf_iterator<char> InIt;  bool test = true;  locale loc(locale::classic(), new My_money_io);  string bufferp("$1234.56");  string buffern("$-1234.56");  string bufferp_ns("1234.56");  string buffern_ns("-1234.56");  bool intl = false;  InIt iendp, iendn, iendp_ns, iendn_ns;  ios_base::iostate err;  string valp, valn, valp_ns, valn_ns;  const money_get<char,InIt>& mg  =    use_facet<money_get<char, InIt> >(loc);  istringstream fmtp(bufferp);  fmtp.imbue(loc);  InIt ibegp(fmtp);  mg.get(ibegp,iendp,intl,fmtp,err,valp);  VERIFY( valp == "123456" );  istringstream fmtn(buffern);  fmtn.imbue(loc);  InIt ibegn(fmtn);  mg.get(ibegn,iendn,intl,fmtn,err,valn);  VERIFY( valn == "-123456" );  istringstream fmtp_ns(bufferp_ns);  fmtp_ns.imbue(loc);  InIt ibegp_ns(fmtp_ns);  mg.get(ibegp_ns,iendp_ns,intl,fmtp_ns,err,valp_ns);  VERIFY( valp_ns == "123456" );  istringstream fmtn_ns(buffern_ns);  fmtn_ns.imbue(loc);  InIt ibegn_ns(fmtn_ns);  mg.get(ibegn_ns,iendn_ns,intl,fmtn_ns,err,valn_ns);  VERIFY( valn_ns == "-123456" );}// We were appending to the string val passed by reference, instead// of constructing a temporary candidate, eventually copied into// val in case of successful parsing.void test06(){  using namespace std;  bool test = true;  typedef istreambuf_iterator<char> InIt;  InIt iend1, iend2, iend3;  locale loc;  string buffer1("123");  string buffer2("456");  string buffer3("Golgafrincham"); // From Nathan's original idea.  string val;  ios_base::iostate err;  const money_get<char,InIt>& mg =    use_facet<money_get<char, InIt> >(loc);  istringstream fmt1(buffer1);  InIt ibeg1(fmt1);  mg.get(ibeg1,iend1,false,fmt1,err,val);  VERIFY( val == buffer1 );  istringstream fmt2(buffer2);  InIt ibeg2(fmt2);  mg.get(ibeg2,iend2,false,fmt2,err,val);  VERIFY( val == buffer2 );  val = buffer3;  istringstream fmt3(buffer3);  InIt ibeg3(fmt3);  mg.get(ibeg3,iend3,false,fmt3,err,val);  VERIFY( val == buffer3 );}struct My_money_io_a : public std::moneypunct<char,false>{  char_type do_decimal_point() const { return '.'; }  std::string do_grouping() const { return "\004"; }    std::string do_curr_symbol() const { return "$"; }  std::string do_positive_sign() const { return "()"; }    int do_frac_digits() const { return 2; }  pattern do_pos_format() const  {    pattern pat = { { sign, value, space, symbol } };    return pat;  }};struct My_money_io_b : public std::moneypunct<char,false>{  char_type do_decimal_point() const { return '.'; }  std::string do_grouping() const { return "\004"; }    std::string do_curr_symbol() const { return "$"; }  std::string do_positive_sign() const { return "()"; }    int do_frac_digits() const { return 2; }  pattern do_pos_format() const  {    pattern pat = { { sign, value, symbol, none } };    return pat;  }};// This one exercises patterns of the type { X, Y, Z, symbol } and// { X, Y, symbol, none } for a two character long sign. Therefore// the optional symbol (showbase is false by default) must be consumed// if present, since "rest of the sign" is left to read.void test07(){  using namespace std;  typedef istreambuf_iterator<char> InIt;  bool intl = false;  bool test = true;  ios_base::iostate err;  locale loc_a(locale::classic(), new My_money_io_a);  string buffer_a("(1234.56 $)");  string buffer_a_ns("(1234.56 )");  InIt iend_a, iend_a_ns;  string val_a, val_a_ns;  const money_get<char,InIt>& mg_a  =    use_facet<money_get<char, InIt> >(loc_a);  istringstream fmt_a(buffer_a);  fmt_a.imbue(loc_a);  InIt ibeg_a(fmt_a);  mg_a.get(ibeg_a,iend_a,intl,fmt_a,err,val_a);  VERIFY( val_a == "123456" );  istringstream fmt_a_ns(buffer_a_ns);  fmt_a_ns.imbue(loc_a);  InIt ibeg_a_ns(fmt_a_ns);  mg_a.get(ibeg_a_ns,iend_a_ns,intl,fmt_a_ns,err,val_a_ns);  VERIFY( val_a_ns == "123456" );  locale loc_b(locale::classic(), new My_money_io_b);  string buffer_b("(1234.56$)");  string buffer_b_ns("(1234.56)");  InIt iend_b, iend_b_ns;  string val_b, val_b_ns;  const money_get<char,InIt>& mg_b  =    use_facet<money_get<char, InIt> >(loc_b);  istringstream fmt_b(buffer_b);  fmt_b.imbue(loc_b);  InIt ibeg_b(fmt_b);  mg_b.get(ibeg_b,iend_b,intl,fmt_b,err,val_b);  VERIFY( val_b == "123456" );  istringstream fmt_b_ns(buffer_b_ns);  fmt_b_ns.imbue(loc_b);  InIt ibeg_b_ns(fmt_b_ns);  mg_b.get(ibeg_b_ns,iend_b_ns,intl,fmt_b_ns,err,val_b_ns);  VERIFY( val_b_ns == "123456" );}// http://gcc.gnu.org/ml/libstdc++/2002-05/msg00038.htmlvoid test08(){  bool test = true;  const char* tentLANG = std::setlocale(LC_ALL, "ja_JP.eucjp");  if (tentLANG != NULL)    {      std::string preLANG = tentLANG;      test01();      test02();      test03();      test05();      test06();      test07();      std::string postLANG = std::setlocale(LC_ALL, NULL);      VERIFY( preLANG == postLANG );    }}int main(){  test01();  test02();  test03();  test04();  test05();  test06();  test07();  test08();  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -