C++ 11特性中string与数字之间的互相转换

  在写C++时经常会遇到字符串string与int等数字之间的相互转化,在java这种语言特性特别丰富的语言中能够通过Integer和String包装类中的函数parseInt和valueOf等函数轻松转换,而在C++中一直没有特别好的处理办法。

  在之前的经历中,我都是通过C++中的字符串流stringstream来进行转换的,即通过如下函数:

1 int str2int(string input){
2         stringstream ss;
3         ss<<input;
4         int res;
5         ss>>res;
6         return res;
7     }

以及:

1     string int2str(int input){
2         stringstream ss;
3         ss<<input;
4         string res;
5         ss>>res;
6         return res;
7     }

但这样写的效率并不高,特别是遇到大批量这种转换需要进行的时候。

直到今天在网上进一步搜索的时候才发现C++11 增加的特性中string类已经增加了完整的处理方法:

std::to_string

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

to_string函数几乎可以将所有数字类型转换成string;而包括std::stod,std::stof等等函数可以轻松把string转换成各种数字类型,具体可见此处

std::stoi

nt stoi (const string&  str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

下面分析一下stoi函数中两个可选参数的意义:

Parameters

str              //第一个参数是需要转换成数字的string
String object with the representation of an integral number.         
idx              //第二个参数是一个指向size_t类型变量的指针,通过传入该参数可以获取在转换成数字之后的字符串起始位置,具体看后面的example
Pointer to an object of type size_t, whose value is set by the function to position of the next character in str after the numerical value.           
This parameter can also be a null pointer, in which case it is not used.
base    //第三个参数表示string中数字的表现进制形式,常用的有二进制,十进制(默认),十六进制等。
Numerical base (radix) that determines the valid characters and their interpretation.
If this is 0, the base used is determined by the format in the sequence (see strtol for details). Notice that by default this argument is 10, not 0.
 1 // stoi example
 2 #include <iostream>   // std::cout
 3 #include <string>     // std::string, std::stoi
 4
 5 int main ()
 6 {
 7   std::string str_dec = "2001, A Space Odyssey";
 8   std::string str_hex = "40c3";
 9   std::string str_bin = "-10010110001";
10   std::string str_auto = "0x7f";
11
12   std::string::size_type sz;   // alias of size_t
13
14   int i_dec = std::stoi (str_dec,&sz);                      //sz的指针作为参数传入函数,获取截断数字之后的开始位置
15   int i_hex = std::stoi (str_hex,nullptr,16);
16   int i_bin = std::stoi (str_bin,nullptr,2);
17   int i_auto = std::stoi (str_auto,nullptr,0);
18
19   std::cout << str_dec << ": " << i_dec << " and [" << str_dec.substr(sz) << "]\n";          //substr从截断处开始截取
20   std::cout << str_hex << ": " << i_hex << ‘\n‘;
21   std::cout << str_bin << ": " << i_bin << ‘\n‘;
22   std::cout << str_auto << ": " << i_auto << ‘\n‘;
23
24   return 0;
25 }

Output:

2001, A Space Odyssey: 2001 and [, A Space Odyssey]
40c3:  16579
-10010110001: -1201
0x7f: 127

参考:

http://www.cplusplus.com/reference/string/stoi/

http://www.cplusplus.com/reference/string/to_string/

原文地址:https://www.cnblogs.com/J1ac/p/8229150.html

时间: 2024-10-13 11:44:21

C++ 11特性中string与数字之间的互相转换的相关文章

python中文和unicode字符串之间的互相转换

首先:中文->unicode字符串 import chardet import codecs >>> a = "我是一个中国人">>> a'\xce\xd2\xca\xc7\xd2\xbb\xb8\xf6\xd6\xd0\xb9\xfa\xc8\xcb' >>> chardet.detect(a){'confidence': 0.99, 'encoding': 'GB2312'}>>> b = a.decod

CString string char* char 之间的字符转换(多种方法)

在写程序的时候,我们经常遇到各种各样的类型转换,比如 char* CString string 之间的互相转换.首先解释下三者的含义. CString 是一种很有用的数据类型.它们很大程度上简化了MFC中的许多操作(适用于MFC框架),使得MFC在做字符串操作的时候方便了很多.需要包含头文件#include <afx.h>. C++中的string用于便是字符串,功能比较强大.要想使用标准C++中string类,必须要包含#include <string>// 注意是<str

C/C++中字符串与数字之间的转换

主要有两种方式:C 中能够使用 sprintf 将数字转为字符数组,sscanf 将字符数组转为数字:而在 C++ 中不仅能够使用 C 中的方法,还能够使用 stringstream 实现字符串与数字间的转换. #include "iostream" #include "string" #include "sstream" #include "cstdio" using namespace std; string num2st

String和数字之间的转化

主要是JDK的代码,还是比较的经典,值得一看,例如: package alg; /** * @author zha 字符串之间的转化 */ public class Alg3StringToint { /** * @param args */ public static void main(String[] args) { String intv = "1232192373290"; // int value = Integer.parseInt(intv); // System.ou

C#中String 与Color之间的相互转换

其实,我们平常如果要在数据库存放Color类型值的话,肯定会在数据库中建立varchar类型.对吧.但是Color怎么存才合适呢,当然是要转为String了.这里小宋作个简介吧.其实用法很简单:      这个控件中,最后取得的当然是Color类型的值了.所在转为String只要用转换器就行.   String  color = System.Drawing.ColorTranslator.ToHtml(colorEdit1.Color); //将Color对象转为String对象.如#AABB

python中的字符数字之间的转换函数

int(x [,base ])         将x转换为一个整数 long(x [,base ])        将x转换为一个长整数 float(x )               将x转换到一个浮点数 complex(real [,imag ])  创建一个复数 str(x )                 将对象 x 转换为字符串 repr(x )                将对象 x 转换为表达式字符串 eval(str )              用来计算在字符串中的有效Py

【转】C# String.Format数字格式化输出各种转换{0:N2} {0:D2} {0:C2}...

int a = 12345678; //格式为sring输出 // Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); // Label2.Text = "asdfadsf"+a.ToString()+"adsfasdf"; // Label1.Text = string.Format("asdfadsf{0:C}adsfasdf",a);//asdfadsf¥1,234

javascript中字符串向数字类型的自动转换

js中类型的转换依环境而定,当字符串向数字类型(浮点)转换时,有几种情况: 1.加号连接符引导为字符拼接: console.log("2"+1); 21 console.log(1+"2"+1); 121 2.其余情况引导为数字计算: console.log(0-"2"+1); -1 console.log("2"*2); 4 console.log(1*"2"+1); 3 3.当字符串带非数字时返回NaN

int 与 String 与 char 之间的互相转换

int 转 String: 1 //方式一: 2 int i1 = 888; 3 String s1 = Integer.toString(i1); 4 5 //方式二: 6 int i2 = 888; 7 String s2 = String.valueOf(i2); 8 9 //方式三: 10 int i3 = 888; 11 String s3 = i3+""; String 转 int : 1 //方式一: 2 String s = "888"; 3 int