由于本人当初也是从C语言转到C++阵营的,所以在写代码的过程中难免会用到C语言的东西,在公司当前的项目中用到了很多C++的标准模板库STL里面的东西,字符串类型的 string 自然少不了。于是在程序中就会涉及到很多关于字符串转到整型 和 整型转换成字符串 类型这样的转换。
也就是:
string => int
int => string
相信大家平时也经常遇到,之前呢,因为从C语言阵营转过来的,所以对于 string => int 一直用的是 atoi,int => string 一直用的是 itoa 或者 sprintf,示例代码如下:
//string => int
string str = "123";
int num = atoi(str.c_str());
//int => string
int num = 123;
char szNum[100] = ;
sprintf(szNum, "%d", num);
string str = szNum;
之前一直这么用也没感觉什么,可近期总感觉既然是用C++的string,那么是否STL中应该有类似 atoi 或者 itoa 之类的函数实现呢?使用起来会更方便也更安全,不然一旦 szNum 这个缓冲区定义小了,就会发生溢出的现象。
不出所料,果然,在 C++ STL 的标准模板库 string 文件中找到了相关的函数实现,原来一直有,只是我没用到而已。
我本地安装的是vs2013,路径在:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\string
关于整型或者浮点型转换到 string 字符串的重载函数就有9种,怎么样,很全吧,这回够用了,列出来给大家:
string to_string(int _Val);
string to_string(unsigned int _Val);
string to_string(long _Val);
string to_string(unsigned long _Val);
string to_string(_Longlong _Val);
string to_string(_ULonglong _Val);
string to_string(long double _Val);
string to_string(double _Val);
string to_string(float _Val)
怎么样,包含了我们常见的所有类型了。不过这些函数都是在 std 命名空间下面的,所以如果大家没有使用:using namespace std; 的话就得加上 std:: 前缀来引用上面那些函数喽!
好了,关于如何转换到 string 字符串类型就说到这,接下来说说如何将string字符串类型转换到 整型 或者 浮点型。C++ STL 也提供给我们 8 个函数来使用,声明如下:
int stoi(const string& _Str, size_t *_Idx = 0, int _Base = 10);
long stol(const string& _Str, size_t *_Idx = 0, int _Base = 10);
unsigned long stoul(const string& _Str, size_t *_Idx = 0, int _Base = 10);
_Longlong stoll(const string& _Str, size_t *_Idx = 0, int _Base = 10);
_ULonglong stoull(const string& _Str, size_t *_Idx = 0, int _Base = 10);
float stof(const string& _Str, size_t *_Idx = 0);
double stod(const string& _Str, size_t *_Idx = 0);
long double stold(const string& _Str, size_t *_Idx = 0);
怎么样?也很全了吧,我们常见的 int、long、float、double 都有了,而且包含了有符号和无符号的版本。大家直接拿过来用就行了,而且第二个参数和第三个参数都有默认的实参,所以一般情况下大家只需要传递第一个的字符串类型参数就可以了。使用起来很方便的。同样这些函数也都是在 std 命名空间下!
还有一个方便大家的,这个文件中针对以上所有的函数都提供了一个宽字节的字符串的版本,即,字符串类型是 wstring,更方便大家来使用了!
好了,今天先说到这里了,以后有更好的东西再分享给大家!
领取专属 10元无门槛券
私享最新 技术干货