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

本文详述了C和C++中字符串转数值的方法,包括C库函数如atoi、atof、strtoul等,以及C++的istringstream类实现。通过实例展示了不同类型的数值转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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库函数差不太多,这里不再赘述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值