1. 前言
在工作中经常会碰到一些string转数值类型的转换操作,以下是对C和C++语言处理string转数值类型的小总结。
2. C库函数
在<stdlib.h>的头文件中有好些个库函数支持从字符串转为数值。
2.1 字符串转整型
-
字符串转Int
函数原型:
int atoi(const char* str)
参数:str表示要被转换的字符串
//示例
char* ch = "18";
string str = "10";
int a = atoi(ch); // 结果:a = 18
int b = atoi(str.c_str()); // 结果 b = 10
2.字符串转unsigned long int
函数原型
unsigned long int strtoul (const char* str, char** endptr, int base);
函数参数:
str:将被转换的字符串
endptr:指向str中数字后第一个非数字字符
base:表示转换进制
//示例
char* ch = "100";
string str = "101";
unsigned int a = strtoul(ch,NULL,10);//以10进制将ch转换为unsigned long int
unsigned int b = strtoul(str.c_str(),NULL,10);//同理
3.字符串转float或者double
函数原型:
double atof(const char* str)
//示例
char* ch = "10.001";
string str = "6.666";
double a = atof(ch);
float b = atof(str.c_str());//这里b是单精度型,返回值是double,
//所以会存在类型转换问题,由float到double存在损失精度
-
字符串转long long
函数原型:
long long llLove=atoll(const char* str);
//示例
char *ch = "199";
string str = "12345";
long long a = strtoll(ch);
long long b = strtoll(str.c_str());
C库中还有字符串转换为其他数值类型的函数,但基本上常用的就以上这些。
3. istringstream类
在C++中引入了ostringstream、istringstream、stringstream这三个类,但是我们今天要讲的是istringstream类。该类包含在sstream头文件中。
模板函数实现通用的string转数值类型:
template <class Type>
Type stringToNum(const string& str)
{
istringstream iss(str);
Type result;
iss >> result;
return result;
}
接下来看一下简单的小例子:
#include <iostream>
#include <sstream>
using namespace std;
template <class Type>
Type stringToNum(const string& str)
{
istringstream iss(str);
Type result;
iss >> result;
return result;
}
int main()
{
string str1 = "100";
string str2 = "66.66";
cout << stringToNum<int>(str1) << endl; //输出100
cout << stringToNum<double>(str2) << endl; //输出66.66
return 0;
}
除了以上的方法之外,C++也提供了相关的库函数来将string转换为数值类型,例如stoi等等,其用法和C库函数差不太多,这里不再赘述。
版权声明:本文为weixin_43055404原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。