string wstring 转换

 1  #include  < iostream >
 2  #include  < string >
 3 
 4  using   namespace  std ;
 5 
14 
15  std:: string  ws2s( const  std::wstring &  ws)
16  {
17      std:: string  curLocale  =  setlocale(LC_ALL, NULL);         //  curLocale = "C";
18      setlocale(LC_ALL,  " chs " );
19       const  wchar_t *  _Source  =  ws.c_str();
20      size_t _Dsize  =   2   *  ws.size()  +   1 ;
21       char   * _Dest  =   new   char [_Dsize];
22      memset(_Dest, 0 ,_Dsize);
23      wcstombs(_Dest,_Source,_Dsize);
24      std:: string  result  =  _Dest;
25      delete []_Dest;
26      setlocale(LC_ALL, curLocale.c_str());
27       return  result;
28  }
29 
30  std::wstring s2ws( const  std:: string &  s)
31  {
32      setlocale(LC_ALL,  " chs " ); 
33       const   char *  _Source  =  s.c_str();
34      size_t _Dsize  =  s.size()  +   1 ;
35      wchar_t  * _Dest  =   new  wchar_t[_Dsize];
36      wmemset(_Dest,  0 , _Dsize);
37      mbstowcs(_Dest,_Source,_Dsize);
38      std::wstring result  =  _Dest;
39      delete []_Dest;
40      setlocale(LC_ALL,  " C " );
41       return  result;
42  }
43 
44  int  main()
45  {
46      freopen(  " data.in " " r " , stdin ) ;
47      freopen(  " data.out " " w " , stdout ) ;
48 
49       // wcout.imbue( locale("chs") ) ;
50       string  line ;
51      wstring wline ;
52      wstring oline ;
53      VEC vec ;
54 
55      cout  <<   sizeof char  )  <<  endl ;
56      cout  <<   sizeof ( wchar_t )  <<  endl ;
57 
58       while ( cin  >>  line )
59      {
60           // cout << line << endl ;
61 
62          wline  =  s2ws( line ) ;
63 
64          cout  <<  ws2s( wline )  <<  endl ;
65 
66           for int  i = 0 ; i < wline.length(); i ++  )
67          {
68              oline  +=  wline[i] ;
69              oline  +=  (wchar_t)( ' / ' ) ;
70          }
71 
72          cout  <<  ws2s( oline )  <<  endl ;
73      }
74 
75       return   0  ;
76  }

你可能感兴趣的:(string wstring 转换)