C/C++ string转数值类型的方法总结

  • Post author:
  • Post category:其他




1. 前言

在工作中经常会碰到一些string转数值类型的转换操作,以下是对C和C++语言处理string转数值类型的小总结。



2. C库函数

在<stdlib.h>的头文件中有好些个库函数支持从字符串转为数值。



2.1 字符串转整型

  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存在损失精度
  1. 字符串转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 版权协议,转载请附上原文出处链接和本声明。