如何将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
4
Filename : ArrayToVectorByConstructor.cpp
5
Compiler : Visual C++ 8.0
6
Description : Demo how to convert any type to string.
7
Release : 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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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
4
Filename : stringstream_to_double.cpp
5
Compiler : Visual C++ 8.0
6
Description : Demo how to convert string to any type.
7
Release : 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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

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
4
Filename : int2str_sprintf.cpp
5
Compiler : Visual C++ 8.0 / ANSI C
6
Description : Demo the how to convert int to const char *
7
Release : 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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

2.若用C語言,還有另外一個寫法,使用_itoa(),Microsoft將這個function擴充成好幾個版本,可參考MSDN Library。
1
/*
2
(C) OOMusou 2007 http://oomusou.cnblogs.com
3
4
Filename : int2str_itoa.cpp
5
Compiler : Visual C++ 8.0 / ANSI C
6
Description : Demo the how to convert int to const char *
7
Release : 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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

3.若用C++,stringstream是個很好用的東西,stringstream無論是<<或>>,都會自動轉型,要做各型別間的轉換,stringstream是個很好的媒介。
1
/*
2
(C) OOMusou 2007 http://oomusou.cnblogs.com
3
4
Filename : int2str_sstream.cpp
5
Compiler : Visual C++ 8.0 / ISO C++
6
Description : Demo the how to convert int to string
7
Release : 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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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