如何将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}
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 }
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}
4.若用C++,據稱boost有更好的方法,不過我還沒有裝boost,所以無從測試
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) 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}
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}
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,所以無從測試