int double std:string之间的互转

 

如何将int,double转std::string? (C/C++) (template)

std::string为library type,而int、double为built-in type,两者无法互转,这里使用function template的方式将int转std::string,将double转std:string。

 1 /* 
 2(C) OOMusou 2006 http://oomusou.cnblogs.com
 3
 4Filename    : ArrayToVectorByConstructor.cpp
 5Compiler    : Visual C++ 8.0
 6Description : Demo how to convert any type to string.
 7Release     : 11/18/2006
 8*/

 9 #include  < iostream >
10 #include  < sstream >
11 #include  < string >
12
13 template  < class  T >  
14 std:: string  ConvertToString(T);
15
16 int  main()  {
17  std::string s;
18
19  // Convert int to std::string
20  int i = 123;
21  s = ConvertToString(i);
22  std::cout << s << std::endl;
23
24  // Convert double to std::string
25  double d = 123.123
26  s = ConvertToString(d);
27  std::cout << s << std::endl;
28
29  return 0;
30}

31
32 template  < class  T >  
33 std:: string  ConvertToString(T value)  {
34  std::stringstream ss;
35  ss << value;
36  return ss.str();
37}

如何将std::string转int,double? (C/C++) (C) (template)


Abstract
std::string为library type,而int、double为built-in type,两者无法利用(int)或(double)的方式互转,本文提出轉換的方式。

Introduction
使用環境:Visual C++ 9.0 / Visual Studio 2008

Method 1:
使用C的atoi()與atof()。

先利用c_str()轉成C string,再用atoi()與atof()。

string_to_double.cpp / C++

1  /*  
2  (C) OOMusou 2008 http://oomusou.cnblogs.com
3 
4  Filename    : string_to_double.cpp
5  Compiler    : Visual C++ 9.0 / Visual Studio 2008
6  Description : Demo how to convert string to int (double)
7  Release     : 08/01/2008 1.0
8  */
9 
10  #include < iostream >
11  #include < string >
12  #include < cstdlib >
13 
14  using   namespace std;
15 
16  int main() {
17    string s =   " 123 " ;
18    double n = atof(s.c_str());
19    // int n = atoi(s.c_str());
20   
21    cout << n << endl;
22  }


Method 2:
利用stringstream

这里使用functon template的方式将std::string转int、std::string转double。

stringstream_to_double.cpp / C++

1 /* 
2(C) OOMusou 2006 http://oomusou.cnblogs.com
3
4Filename    : stringstream_to_double.cpp
5Compiler    : Visual C++ 8.0
6Description : Demo how to convert string to any type.
7Release     : 11/18/2006
8*/

9 #include < iostream >
10 #include < sstream >
11 #include < string >
12
13 template < class T >  
14 void convertFromString(T & , const std:: string   & );
15
16 int main() {
17  std::string s("123");
18
19  // Convert std::string to int
20  int i = 0;
21  convertFromString(i,s);
22  std::cout << i << std::endl;
23
24  // Convert std::string to double
25  double d = 0;
26  convertFromString(d,s);
27  std::cout << d << std::endl;
28
29  return 0;
30}

31
32 template < class T >  
33 void convertFromString(T & value, const std:: string   & s) {
34  std::stringstream ss(s);
35  ss >> value;
36}

如何將int轉string? (C/C++) (C)


C/C++並沒有提供內建的int轉string函數,這裡提供幾個方式達到這個需求。

1.若用C語言,且想將int轉char *,可用sprintf(),sprintf()可用類似printf()參數轉型。

 1 /* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : int2str_sprintf.cpp
 5Compiler    : Visual C++ 8.0 / ANSI C
 6Description : Demo the how to convert int to const char *
 7Release     : 01/06/2007 1.0
 8*/

 9 #include  " stdio.h "
10
11 void  int2str( int  ,  char   * );
12
13 int  main()  {
14  int i = 123;
15  char s[64];
16  int2str(i, s);
17  puts(s);
18}

19
20 void  int2str( int  i,  char   * s)  {
21  sprintf(s,"%d",i);
22}


2.若用C語言,還有另外一個寫法,使用_itoa(),Microsoft將這個function擴充成好幾個版本,可參考MSDN Library。

 1 /* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : int2str_itoa.cpp
 5Compiler    : Visual C++ 8.0 / ANSI C
 6Description : Demo the how to convert int to const char *
 7Release     : 01/06/2007 1.0
 8*/

 9 #include  " stdio.h "    //  puts()
10 #include  " stdlib.h "   //  _itoa()
11
12 void  int2str( int  ,  char   * );
13
14 int  main()  {
15  int i = 123;
16  char s[64];
17  int2str(i, s);
18  puts(s);
19}

20
21 void  int2str( int  i,  char   * s)  {
22  _itoa(i, s, 10);
23}


3.若用C++,stringstream是個很好用的東西,stringstream無論是<<或>>,都會自動轉型,要做各型別間的轉換,stringstream是個很好的媒介。

 1 /* 
 2(C) OOMusou 2007 http://oomusou.cnblogs.com
 3
 4Filename    : int2str_sstream.cpp
 5Compiler    : Visual C++ 8.0 / ISO C++
 6Description : Demo the how to convert int to string
 7Release     : 01/06/2007 1.0
 8*/

 9
10 #include  < iostream >
11 #include  < string >
12 #include  < sstream >
13
14 using   namespace  std;
15
16 string  int2str( int & );
17
18 int  main( void {
19  int i = 123;
20  string s;
21  s = int2str(i);
22
23  cout << s << endl;
24}

25
26 string  int2str( int  &i)  {
27  string s;
28  stringstream ss(s);
29  ss << i;
30
31  return ss.str();
32}

4.若用C++,據稱boost有更好的方法,不過我還沒有裝boost,所以無從測試

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符转的各种转换函数库,用这个库,字符串的各种转换再也不头疼 //-------------字符串转数字-------------- int CString_numberStr_2_int(CString str); int stdString_2_int(std::string str);//std string 字符串转int int std_hexString_2_int(std::string str);//std string 字符串转int double CString_2_double(CString in); double stdString_2_double(std::string str);//std string 字符串转double unsigned int hexString_2_u32(std::string str); //-------------数字转字符串-------------- CString CString_int_2_numberStr(int n); CString CString_int_2_numberStr6(int n); std::string stdString_int_2_numberStr(int a); CString double_2_number_CString(double n); std::string double_2_number_String(double a); CString GetCurrWorkingDir(); //获得当前工作路径,不含最后一个字符“\” CString ascii_2_cstring(int ascii);// 把ascii字符转换成对应的字符,返回cstring类型 //-------------字符串转字符串-------------- std::string CString_2_stdString(CString str); CString stdString_2_CString(std::string str); void CString_2_charP(CString str,char *q); //cstring change to ansi string //-------------判断字符串类型-------------- bool is_a_double_type_string(CString str); //-------------字符串复杂操作-------------- int break_string(std::string instr, std::string subStr, vector<std::string>* subs); //以subStr为标记切割instr为多个单词,存储于subs std::string super_CString::getTimeString(bool fgf);//获得表示当前时间的字符串,fgf表示是否需要分隔符 std::string super_CString::getDateTimeString(bool fgf);//获得表示当前时间和日期的字符串,fgf表示是否需要分隔符 std::string getDateString(bool fgf); //获得表示当前日期的字符串,fgf表示是否需要分隔符 std::string string_trim_LR_space(std::string str);//去除字符串前后的空白字符 std::string string_trim_L_space(std::string str);//去除字符串左边的空白字符 std::string string_trim_R_space(std::string str);//去除字符串右边的空白字符 //-------------GUI相关-------------- CString get_CEdit_text(CEdit* edit); //-------------文件、路径相关-------------- CString calc_CurrWorkingDir_filename(CString str);//返回程序运行的当前路径+filename CString calc_work_full_filename(CString filename,CString path);//path为路径,如果path为空返回程序运行的当前路径+filename,否则返回path+filename。 std::string GetCurrWorkingDir_stdString(); std::string calc_CurrWorkingDir_filename(std::string str); std::string calc_work_full_filename(std::string filename,std::string path);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值