原文地址为:
(原創) 如何将std::string转int,double? (C/C++) (C) (template)
转载请注明本文地址: (原創) 如何将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![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
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![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
13
template
<
class
T
>
14
void
convertFromString(T
&
,
const
std::
string
&
);
15![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
16![24a924a57ba6b3f2b51fc9edb7ea4186.jpe](https://i-blog.csdnimg.cn/blog_migrate/156b3a452247379d066a7687077a8e2f.png)
int
main()
{
17
std::string s("123");
18![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
19
// Convert std::string to int
20
int i = 0;
21
convertFromString(i,s);
22
std::cout << i << std::endl;
23![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
24
// Convert std::string to double
25
double d = 0;
26
convertFromString(d,s);
27
std::cout << d << std::endl;
28![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
29
return 0;
30
}
31![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
32
template
<
class
T
>
33![24a924a57ba6b3f2b51fc9edb7ea4186.jpe](https://i-blog.csdnimg.cn/blog_migrate/156b3a452247379d066a7687077a8e2f.png)
void
convertFromString(T
&
value,
const
std::
string
&
s)
{
34
std::stringstream ss(s);
35
ss >> value;
36
}
![24a924a57ba6b3f2b51fc9edb7ea4186.jpe](https://i-blog.csdnimg.cn/blog_migrate/156b3a452247379d066a7687077a8e2f.png)
![9310e85a14af99de4811ff4c77f1f911.jpe](https://i-blog.csdnimg.cn/blog_migrate/a9af314cccc3b1c20a00c16e7c3fb329.png)
2
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
3
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
4
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
5
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
6
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
7
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
8
![](https://i-blog.csdnimg.cn/blog_migrate/a64ee9dafc08211855da6602b1505772.png)
9
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
10
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
11
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
12
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
13
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
14
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
15
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
16
![24a924a57ba6b3f2b51fc9edb7ea4186.jpe](https://i-blog.csdnimg.cn/blog_migrate/156b3a452247379d066a7687077a8e2f.png)
![9310e85a14af99de4811ff4c77f1f911.jpe](https://i-blog.csdnimg.cn/blog_migrate/a9af314cccc3b1c20a00c16e7c3fb329.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cb07e1c50c27978e7bbc9a381a7e3faa.png)
17
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
18
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
19
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
20
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
21
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
22
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
23
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
24
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
25
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
26
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
27
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
28
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
29
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
30
![](https://i-blog.csdnimg.cn/blog_migrate/a64ee9dafc08211855da6602b1505772.png)
31
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
32
![](https://i-blog.csdnimg.cn/blog_migrate/30d0d8ffd4dbf85ca6de25ae391dcc39.png)
33
![24a924a57ba6b3f2b51fc9edb7ea4186.jpe](https://i-blog.csdnimg.cn/blog_migrate/156b3a452247379d066a7687077a8e2f.png)
![9310e85a14af99de4811ff4c77f1f911.jpe](https://i-blog.csdnimg.cn/blog_migrate/a9af314cccc3b1c20a00c16e7c3fb329.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cb07e1c50c27978e7bbc9a381a7e3faa.png)
34
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
35
![](https://i-blog.csdnimg.cn/blog_migrate/1553bc1c863899173c87ebf2aa836c76.png)
36
![](https://i-blog.csdnimg.cn/blog_migrate/a64ee9dafc08211855da6602b1505772.png)
See Also
(原創) 如何将int,double转std::string? (中级) (C++) (template C++)
(原創) 如何將int轉string? (初級) (C/C++)
Reference
Bertel Brander, Midgaard, http://home20.inet.tele.dk/midgaard/tipc20050107.html
转载请注明本文地址: (原創) 如何将std::string转int,double? (C/C++) (C) (template)