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

📄 money_get_members_wchar_t.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 wstring str = L"0.01Eleanor Roosevelt";  wistringstream 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  wstring res1;  iter_type end1 = mg.get(str.begin(), str.end(), false, iss, err, res1);  wstring rem1(end1, str.end());  VERIFY( err == goodbit );  VERIFY( res1 == L"1" );  VERIFY( rem1 == L"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);  wstring rem2(end2, str.end());  VERIFY( err == goodbit );  VERIFY( res2 == 1 );  VERIFY( rem2 == L"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<wchar_t,false>{  char_type do_decimal_point() const { return L'.'; }  std::string do_grouping() const { return "\004"; }    std::wstring do_curr_symbol() const { return L"$"; }  std::wstring do_positive_sign() const { return L""; }  std::wstring do_negative_sign() const { return L"-"; }    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;  bool test = true;  typedef istreambuf_iterator<wchar_t> InIt;  locale loc(locale::classic(), new My_money_io);  wstring bufferp(L"$1234.56");  wstring buffern(L"$-1234.56");  wstring bufferp_ns(L"1234.56");  wstring buffern_ns(L"-1234.56");  bool intl = false;  InIt iendp, iendn, iendp_ns, iendn_ns;  ios_base::iostate err;  wstring valp, valn, valp_ns, valn_ns;  const money_get<wchar_t,InIt>& mg  =    use_facet<money_get<wchar_t, InIt> >(loc);  wistringstream fmtp(bufferp);  fmtp.imbue(loc);  InIt ibegp(fmtp);  mg.get(ibegp,iendp,intl,fmtp,err,valp);  VERIFY( valp == L"123456" );  wistringstream fmtn(buffern);  fmtn.imbue(loc);  InIt ibegn(fmtn);  mg.get(ibegn,iendn,intl,fmtn,err,valn);  VERIFY( valn == L"-123456" );  wistringstream 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 == L"123456" );  wistringstream 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 == L"-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<wchar_t> InIt;  InIt iend1, iend2, iend3;  locale loc;  wstring buffer1(L"123");  wstring buffer2(L"456");  wstring buffer3(L"Golgafrincham");  wstring val;  ios_base::iostate err;  const money_get<wchar_t,InIt>& mg =    use_facet<money_get<wchar_t, InIt> >(loc);  wistringstream fmt1(buffer1);  InIt ibeg1(fmt1);  mg.get(ibeg1,iend1,false,fmt1,err,val);  VERIFY( val == buffer1 );  wistringstream fmt2(buffer2);  InIt ibeg2(fmt2);  mg.get(ibeg2,iend2,false,fmt2,err,val);  VERIFY( val == buffer2 );  val = buffer3;  wistringstream fmt3(buffer3);  InIt ibeg3(fmt3);  mg.get(ibeg3,iend3,false,fmt3,err,val);  VERIFY( val == buffer3 );}struct My_money_io_a : public std::moneypunct<wchar_t,false>{  char_type do_decimal_point() const { return L'.'; }  std::string do_grouping() const { return "\004"; }    std::wstring do_curr_symbol() const { return L"$"; }  std::wstring do_positive_sign() const { return L"()"; }    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<wchar_t,false>{  char_type do_decimal_point() const { return L'.'; }  std::string do_grouping() const { return "\004"; }    std::wstring do_curr_symbol() const { return L"$"; }  std::wstring do_positive_sign() const { return L"()"; }    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;  bool test = true;  typedef istreambuf_iterator<wchar_t> InIt;  bool intl = false;  ios_base::iostate err;  locale loc_a(locale::classic(), new My_money_io_a);  wstring buffer_a(L"(1234.56 $)");  wstring buffer_a_ns(L"(1234.56 )");  InIt iend_a, iend_a_ns;  wstring val_a, val_a_ns;  const money_get<wchar_t,InIt>& mg_a  =    use_facet<money_get<wchar_t, InIt> >(loc_a);  wistringstream 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 == L"123456" );  wistringstream 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 == L"123456" );  locale loc_b(locale::classic(), new My_money_io_b);  wstring buffer_b(L"(1234.56$)");  wstring buffer_b_ns(L"(1234.56)");  InIt iend_b, iend_b_ns;  wstring val_b, val_b_ns;  const money_get<wchar_t,InIt>& mg_b  =    use_facet<money_get<wchar_t, InIt> >(loc_b);  wistringstream 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 == L"123456" );  wistringstream 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 == L"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 );    }}#endifint main(){#ifdef _GLIBCPP_USE_WCHAR_T  test01();  test02();  test03();  test04();  test05();  test06();  test07();  test08();#endif  return 0;}

⌨️ 快捷键说明

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