int double std:string之间的互转

转载 2008年09月28日 11:29:00
 

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

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

 1ExpandedBlockStart.gif/* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : ArrayToVectorByConstructor.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0
 6InBlock.gifDescription : Demo how to convert any type to string.
 7InBlock.gifRelease     : 11/18/2006
 8ExpandedBlockEnd.gif*/

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

31None.gif
32None.giftemplate <class T> 
33ExpandedBlockStart.gifstd::string ConvertToString(T value) {
34InBlock.gif  std::stringstream ss;
35InBlock.gif  ss << value;
36InBlock.gif  return ss.str();
37ExpandedBlockEnd.gif}

如何将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++

1ExpandedBlockStart.gifContractedBlock.gif/**//* 
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
13template <class T> 
14void convertFromString(T &, const std::string &);
15
16ExpandedBlockStart.gifint 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
32template <class T> 
33ExpandedBlockStart.gifvoid 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()參數轉型。

 1ExpandedBlockStart.gif/* 
 2InBlock.gif(C) OOMusou 2007 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : int2str_sprintf.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ANSI C
 6InBlock.gifDescription : Demo the how to convert int to const char *
 7InBlock.gifRelease     : 01/06/2007 1.0
 8ExpandedBlockEnd.gif*/

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

19None.gif
20ExpandedBlockStart.gifvoid int2str(int i, char *s) {
21InBlock.gif  sprintf(s,"%d",i);
22ExpandedBlockEnd.gif}


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

 1ExpandedBlockStart.gif/* 
 2InBlock.gif(C) OOMusou 2007 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : int2str_itoa.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ANSI C
 6InBlock.gifDescription : Demo the how to convert int to const char *
 7InBlock.gifRelease     : 01/06/2007 1.0
 8ExpandedBlockEnd.gif*/

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

20None.gif
21ExpandedBlockStart.gifvoid int2str(int i, char *s) {
22InBlock.gif  _itoa(i, s, 10);
23ExpandedBlockEnd.gif}


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

 1ExpandedBlockStart.gif/* 
 2InBlock.gif(C) OOMusou 2007 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : int2str_sstream.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ISO C++
 6InBlock.gifDescription : Demo the how to convert int to string
 7InBlock.gifRelease     : 01/06/2007 1.0
 8ExpandedBlockEnd.gif*/

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

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

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

C++数值类型与string的相互转换

使用函数模板将基本数据类型(整型、字符型、实型、布尔型)转换成string。//ostringstream对象用来进行格式化的输出,常用于将各种类型转换为string类型 //ostringstrea...
  • K346K346
  • K346K346
  • 2016年03月18日 22:11
  • 34413

C++中int与string的相互转换

一、int转string 1.c++11标准增加了全局函数std::to_string: string to_string (int val); string to_string (long v...
  • u010510020
  • u010510020
  • 2017年06月27日 15:20
  • 5371

C++中int型与string型互相转换

本以为这么多年C#经验,学个C++没多难,现在发现错了。C++真TM难。 今天遇到int转string绊了半天,方法很多,不知道为什么搞那么复杂, 我只挑最简单易懂的,管他效率不效率的。 int转st...
  • TColin
  • TColin
  • 2016年08月02日 10:25
  • 13564

C++ - string类型转换int类型

string类型转换int类型本文地址: http://blog.csdn.net/caroline_wendyC语言转换形式:... std::string str; int i = atoi(st...
  • u012515223
  • u012515223
  • 2014年06月08日 20:16
  • 38083

c++ int convert to std::string 转换成std::string

#include #include #include std::string int2str(int &i) {  std::string s;  std::stringstream ss(s);  ...
  • edisundong
  • edisundong
  • 2011年12月20日 09:42
  • 3191

【C++】int转换为string的两种方法(to_string、字符串流)

记录一下用到过的int转换成string的两种方法 第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及st...
  • chavo0
  • chavo0
  • 2016年04月01日 17:20
  • 91626

MySQL 字符串 转 int/double CAST与CONVERT 函数的用法

转:http://hongmin118.iteye.com/blog/2029728 MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。...
  • pzasdq
  • pzasdq
  • 2016年04月08日 14:47
  • 14720

Mysql常用的数据类型以及转换函数

一 常用的数据类型     数字类型:     int类型分类        1 tinyint   1字节        2 smallint  2字节        3 mediumin...
  • t0404
  • t0404
  • 2016年07月03日 11:54
  • 16606

C++中将string类型转换为int, float, double类型 主要通过以下几种方式:

C++中将string类型转换为int, float, double类型 主要通过以下几种方式: # 方法一: 使用stringstream stringstream在int或float类型转换为...
  • candadition
  • candadition
  • 2012年03月11日 17:53
  • 87421

C++中怎么进行string转化为double等类型转换

http://blog.csdn.net/jia_xiaoxin/article/details/3070652 Method 1: 使用C的atoi()和atof()。 先利用c_...
  • wusoule
  • wusoule
  • 2013年05月29日 09:19
  • 2679
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:int double std:string之间的互转
举报原因:
原因补充:

(最多只允许输入30个字)